diff --git a/dist/index.html b/dist/index.html index 5bbf730..792680a 100644 --- a/dist/index.html +++ b/dist/index.html @@ -88,8 +88,8 @@
- - - + + + \ No newline at end of file diff --git a/dist/js/app-loader.js b/dist/js/app-loader.js index 46e2f02..6ac67a3 100644 --- a/dist/js/app-loader.js +++ b/dist/js/app-loader.js @@ -1,7 +1,7 @@ (function() { var promise, version; - version = 1446536297279; + version = 1446541504645; window.taigaConfig = { "api": "http://localhost:8000/api/v1/", diff --git a/dist/js/app.js b/dist/js/app.js index a85e194..56e8d4a 100644 --- a/dist/js/app.js +++ b/dist/js/app.js @@ -2994,173 +2994,6 @@ }).call(this); -/* - * Copyright (C) 2014-2015 Andrey Antukh - * Copyright (C) 2014-2015 Jesús Espino Garcia - * Copyright (C) 2014-2015 David Barragán Merino - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - * File: modules/resources.coffee - */ - -(function() { - var ResourcesService, initResources, initUrls, module, taiga, urls, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - - taiga = this.taiga; - - ResourcesService = (function(superClass) { - extend(ResourcesService, superClass); - - function ResourcesService() { - return ResourcesService.__super__.constructor.apply(this, arguments); - } - - return ResourcesService; - - })(taiga.Service); - - urls = { - "auth": "/auth", - "auth-register": "/auth/register", - "invitations": "/invitations", - "users": "/users", - "by_username": "/users/by_username", - "users-password-recovery": "/users/password_recovery", - "users-change-password-from-recovery": "/users/change_password_from_recovery", - "users-change-password": "/users/change_password", - "users-change-email": "/users/change_email", - "users-cancel-account": "/users/cancel", - "user-stats": "/users/%s/stats", - "user-liked": "/users/%s/liked", - "user-voted": "/users/%s/voted", - "user-watched": "/users/%s/watched", - "user-contacts": "/users/%s/contacts", - "permissions": "/permissions", - "notify-policies": "/notify-policies", - "user-storage": "/user-storage", - "memberships": "/memberships", - "bulk-create-memberships": "/memberships/bulk_create", - "roles": "/roles", - "permissions": "/permissions", - "resolver": "/resolver", - "projects": "/projects", - "project-templates": "/project-templates", - "project-modules": "/projects/%s/modules", - "bulk-update-projects-order": "/projects/bulk_update_order", - "project-like": "/projects/%s/like", - "project-unlike": "/projects/%s/unlike", - "project-watch": "/projects/%s/watch", - "project-unwatch": "/projects/%s/unwatch", - "userstory-statuses": "/userstory-statuses", - "points": "/points", - "task-statuses": "/task-statuses", - "issue-statuses": "/issue-statuses", - "issue-types": "/issue-types", - "priorities": "/priorities", - "severities": "/severities", - "milestones": "/milestones", - "userstories": "/userstories", - "bulk-create-us": "/userstories/bulk_create", - "bulk-update-us-backlog-order": "/userstories/bulk_update_backlog_order", - "bulk-update-us-sprint-order": "/userstories/bulk_update_sprint_order", - "bulk-update-us-kanban-order": "/userstories/bulk_update_kanban_order", - "userstories-filters": "/userstories/filters_data", - "userstory-upvote": "/userstories/%s/upvote", - "userstory-downvote": "/userstories/%s/downvote", - "userstory-watch": "/userstories/%s/watch", - "userstory-unwatch": "/userstories/%s/unwatch", - "tasks": "/tasks", - "bulk-create-tasks": "/tasks/bulk_create", - "bulk-update-task-taskboard-order": "/tasks/bulk_update_taskboard_order", - "task-upvote": "/tasks/%s/upvote", - "task-downvote": "/tasks/%s/downvote", - "task-watch": "/tasks/%s/watch", - "task-unwatch": "/tasks/%s/unwatch", - "issues": "/issues", - "bulk-create-issues": "/issues/bulk_create", - "issues-filters": "/issues/filters_data", - "issue-upvote": "/issues/%s/upvote", - "issue-downvote": "/issues/%s/downvote", - "issue-watch": "/issues/%s/watch", - "issue-unwatch": "/issues/%s/unwatch", - "wiki": "/wiki", - "wiki-restore": "/wiki/%s/restore", - "wiki-links": "/wiki-links", - "history/us": "/history/userstory", - "history/issue": "/history/issue", - "history/task": "/history/task", - "history/wiki": "/history/wiki", - "attachments/us": "/userstories/attachments", - "attachments/issue": "/issues/attachments", - "attachments/task": "/tasks/attachments", - "attachments/wiki_page": "/wiki/attachments", - "custom-attributes/userstory": "/userstory-custom-attributes", - "custom-attributes/issue": "/issue-custom-attributes", - "custom-attributes/task": "/task-custom-attributes", - "custom-attributes-values/userstory": "/userstories/custom-attributes-values", - "custom-attributes-values/issue": "/issues/custom-attributes-values", - "custom-attributes-values/task": "/tasks/custom-attributes-values", - "webhooks": "/webhooks", - "webhooks-test": "/webhooks/%s/test", - "webhooklogs": "/webhooklogs", - "webhooklogs-resend": "/webhooklogs/%s/resend", - "userstories-csv": "/userstories/csv?uuid=%s", - "tasks-csv": "/tasks/csv?uuid=%s", - "issues-csv": "/issues/csv?uuid=%s", - "timeline-profile": "/timeline/profile", - "timeline-user": "/timeline/user", - "timeline-project": "/timeline/project", - "search": "/search", - "exporter": "/exporter", - "importer": "/importer/load_dump", - "feedback": "/feedback", - "locales": "/locales", - "applications": "/applications", - "application-tokens": "/application-tokens" - }; - - initUrls = function($log, $urls) { - $log.debug("Initialize api urls"); - return $urls.update(urls); - }; - - initResources = function($log, $rs) { - var i, len, provider, providers, results; - $log.debug("Initialize resources"); - providers = _.toArray(arguments).slice(2); - results = []; - for (i = 0, len = providers.length; i < len; i++) { - provider = providers[i]; - results.push(provider($rs)); - } - return results; - }; - - module = angular.module("taigaResources", ["taigaBase"]); - - module.service("$tgResources", ResourcesService); - - module.run(["$log", "$tgUrls", initUrls]); - - module.run(["$log", "$tgResources", "$tgProjectsResourcesProvider", "$tgCustomAttributesResourcesProvider", "$tgCustomAttributesValuesResourcesProvider", "$tgMembershipsResourcesProvider", "$tgNotifyPoliciesResourcesProvider", "$tgInvitationsResourcesProvider", "$tgRolesResourcesProvider", "$tgUserSettingsResourcesProvider", "$tgSprintsResourcesProvider", "$tgUserstoriesResourcesProvider", "$tgTasksResourcesProvider", "$tgIssuesResourcesProvider", "$tgWikiResourcesProvider", "$tgSearchResourcesProvider", "$tgAttachmentsResourcesProvider", "$tgMdRenderResourcesProvider", "$tgHistoryResourcesProvider", "$tgKanbanResourcesProvider", "$tgModulesResourcesProvider", "$tgWebhooksResourcesProvider", "$tgWebhookLogsResourcesProvider", "$tgLocalesResourcesProvider", "$tgUsersResourcesProvider", initResources]); - -}).call(this); - - /* * Copyright (C) 2014-2015 Andrey Antukh * Copyright (C) 2014-2015 Jesús Espino Garcia diff --git a/dist/js/maps/app.js.map b/dist/js/maps/app.js.map index 17412ba..a1d8aff 100644 --- a/dist/js/maps/app.js.map +++ b/dist/js/maps/app.js.map @@ -1 +1 @@ -{"version":3,"sources":["coffee/app.coffee","coffee/classes.coffee","coffee/utils.coffee","coffee/modules/controllerMixins.coffee","coffee/modules/admin.coffee","coffee/modules/auth.coffee","coffee/modules/backlog.coffee","coffee/modules/base.coffee","coffee/modules/common.coffee","coffee/modules/events.coffee","coffee/modules/feedback.coffee","coffee/modules/integrations.coffee","coffee/modules/issues.coffee","coffee/modules/kanban.coffee","coffee/modules/projects.coffee","coffee/modules/related-tasks.coffee","coffee/modules/resources.coffee","coffee/modules/search.coffee","coffee/modules/taskboard.coffee","coffee/modules/tasks.coffee","coffee/modules/team.coffee","coffee/modules/user-settings.coffee","coffee/modules/userstories.coffee","coffee/modules/wiki.coffee","coffee/modules/common/analytics.coffee","coffee/modules/common/attachments.coffee","coffee/modules/common/bind-scope.coffee","coffee/modules/common/compile-html.directive.coffee","coffee/modules/common/components.coffee","coffee/modules/common/confirm.coffee","coffee/modules/common/custom-field-values.coffee","coffee/modules/common/estimation.coffee","coffee/modules/common/filters.coffee","coffee/modules/common/history.coffee","coffee/modules/common/importer.coffee","coffee/modules/common/lightboxes.coffee","coffee/modules/common/loader.coffee","coffee/modules/common/loading.coffee","coffee/modules/common/popovers.coffee","coffee/modules/common/raven-logger.coffee","coffee/modules/common/tags.coffee","coffee/modules/common/wisiwyg.coffee","coffee/modules/backlog/filters.coffee","coffee/modules/backlog/lightboxes.coffee","coffee/modules/backlog/main.coffee","coffee/modules/backlog/sortable.coffee","coffee/modules/backlog/sprints.coffee","coffee/modules/taskboard/charts.coffee","coffee/modules/taskboard/lightboxes.coffee","coffee/modules/taskboard/main.coffee","coffee/modules/taskboard/sortable.coffee","coffee/modules/kanban/main.coffee","coffee/modules/kanban/sortable.coffee","coffee/modules/issues/detail.coffee","coffee/modules/issues/lightboxes.coffee","coffee/modules/issues/list.coffee","coffee/modules/userstories/detail.coffee","coffee/modules/tasks/detail.coffee","coffee/modules/team/main.coffee","coffee/modules/wiki/main.coffee","coffee/modules/wiki/nav.coffee","coffee/modules/admin/lightboxes.coffee","coffee/modules/admin/memberships.coffee","coffee/modules/admin/nav.coffee","coffee/modules/admin/project-profile.coffee","coffee/modules/admin/project-values.coffee","coffee/modules/admin/roles.coffee","coffee/modules/admin/third-parties.coffee","coffee/modules/projects/lightboxes.coffee","coffee/modules/base/bind.coffee","coffee/modules/base/conf.coffee","coffee/modules/base/contrib.coffee","coffee/modules/base/filters.coffee","coffee/modules/base/http.coffee","coffee/modules/base/location.coffee","coffee/modules/base/model.coffee","coffee/modules/base/navurls.coffee","coffee/modules/base/repository.coffee","coffee/modules/base/storage.coffee","coffee/modules/base/urls.coffee","coffee/modules/resources/attachments.coffee","coffee/modules/resources/custom-attributes-values.coffee","coffee/modules/resources/custom-attributes.coffee","coffee/modules/resources/history.coffee","coffee/modules/resources/invitations.coffee","coffee/modules/resources/issues.coffee","coffee/modules/resources/kanban.coffee","coffee/modules/resources/locales.coffee","coffee/modules/resources/mdrender.coffee","coffee/modules/resources/memberships.coffee","coffee/modules/resources/modules.coffee","coffee/modules/resources/notify-policies.coffee","coffee/modules/resources/projects.coffee","coffee/modules/resources/roles.coffee","coffee/modules/resources/search.coffee","coffee/modules/resources/sprints.coffee","coffee/modules/resources/tasks.coffee","coffee/modules/resources/user-settings.coffee","coffee/modules/resources/users.coffee","coffee/modules/resources/userstories.coffee","coffee/modules/resources/webhooklogs.coffee","coffee/modules/resources/webhooks.coffee","coffee/modules/resources/wiki.coffee","coffee/modules/user-settings/change-password.coffee","coffee/modules/user-settings/lightboxes.coffee","coffee/modules/user-settings/main.coffee","coffee/modules/user-settings/nav.coffee","coffee/modules/user-settings/notifications.coffee","modules/components/components.module.coffee","modules/external-apps/external-apps.module.coffee","modules/home/home.module.coffee","modules/navigation-bar/navigation-bar.module.coffee","modules/profile/profile.module.coffee","modules/projects/projects.module.coffee","modules/resources/resources.module.coffee","modules/user-timeline/user-timeline.module.coffee","modules/components/joy-ride/joy-ride.directive.coffee","modules/components/joy-ride/joy-ride.service.coffee","modules/components/project-menu/project-menu.controller.coffee","modules/components/project-menu/project-menu.directive.coffee","modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee","modules/components/vote-button/vote-button.controller.coffee","modules/components/vote-button/vote-button.directive.coffee","modules/components/watch-button/watch-button.controller.coffee","modules/components/watch-button/watch-button.directive.coffee","modules/external-apps/external-app.controller.coffee","modules/external-apps/external-app.service.coffee","modules/feedback/feedback.service.coffee","modules/home/duties/duty.directive.coffee","modules/home/home.service.coffee","modules/home/projects/home-project-list.directive.coffee","modules/home/working-on/working-on.controller.coffee","modules/home/working-on/working-on.directive.coffee","modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee","modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee","modules/navigation-bar/navigation-bar.directive.coffee","modules/navigation-bar/navigation-bar.service.coffee","modules/profile/profile-bar/profile-bar.controller.coffee","modules/profile/profile-bar/profile-bar.directive.coffee","modules/profile/profile-contacts/profile-contacts.controller.coffee","modules/profile/profile-contacts/profile-contacts.directive.coffee","modules/profile/profile-favs/items/items.directive.coffee","modules/profile/profile-favs/profile-favs.controller.coffee","modules/profile/profile-favs/profile-favs.directive.coffee","modules/profile/profile-hints/profile-hints.controller.coffee","modules/profile/profile-hints/profile-hints.directive.coffee","modules/profile/profile-projects/profile-projects.controller.coffee","modules/profile/profile-projects/profile-projects.directive.coffee","modules/profile/profile-tab/profile-tab.directive.coffee","modules/profile/profile-tabs/profile-tabs.controller.coffee","modules/profile/profile-tabs/profile-tabs.directive.coffee","modules/profile/profile.controller.coffee","modules/projects/components/like-project-button/like-project-button.controller.coffee","modules/projects/components/like-project-button/like-project-button.directive.coffee","modules/projects/components/like-project-button/like-project-button.service.coffee","modules/projects/components/sort-projects.directive.coffee","modules/projects/components/watch-project-button/watch-project-button.controller.coffee","modules/projects/components/watch-project-button/watch-project-button.directive.coffee","modules/projects/components/watch-project-button/watch-project-button.service.coffee","modules/projects/listing/projects-listing.controller.coffee","modules/projects/project/project.controller.coffee","modules/projects/projects.service.coffee","modules/resources/external-apps-resource.service.coffee","modules/resources/issues-resource.service.coffee","modules/resources/projects-resource.service.coffee","modules/resources/resources.coffee","modules/resources/tasks-resource.service.coffee","modules/resources/user-resource.service.coffee","modules/resources/users-resource.service.coffee","modules/resources/userstories-resource.service.coffee","modules/services/app-meta.service.coffee","modules/services/check-permissions.service.coffee","modules/services/current-user.service.coffee","modules/services/lightbox-factory.service.coffee","modules/services/paginate-response.service.coffee","modules/services/project.service.coffee","modules/services/scope-event.service.coffee","modules/services/theme.service.coffee","modules/services/user.service.coffee","modules/services/xhrError.service.coffee","modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee","modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee","modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee","modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee","modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee","modules/user-timeline/user-timeline/user-timeline.controller.coffee","modules/user-timeline/user-timeline/user-timeline.directive.coffee","modules/user-timeline/user-timeline/user-timeline.service.coffee","plugins/main.coffee"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACniBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACheA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACldA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACn2CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5qBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA,kOAAA;IAAA;;;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,KAAA,GAAQ,IAAC,CAAC,KAAK,CAAC;;EAChB,IAAA,GAAO,IAAC,CAAC,KAAK,CAAC;;EACf,QAAA,GAAW,IAAC,CAAC,KAAK,CAAC;;EACnB,OAAA,GAAU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,GAA2B;YAC3B,KAAK,CAAC,IAAN,CAAW,YAAX;mBACA,WAAA,CAAY,YAAZ,EAHJ;;QAD4B;MAAA,CAAA,CAAA,CAAA,IAAA,CAAhC;MAMA,MAAM,CAAC,MAAP,CAAc,MAAM,CAAC,8BAArB,EAAqD,CAAA,SAAA,KAAA;eAAA,SAAC,GAAD;iBACjD,WAAA,CAAY,GAAZ;QADiD;MAAA,CAAA,CAAA,CAAA,IAAA,CAArD;aAGA,MAAM,CAAC,GAAP,CAAW,UAAX,EAAuB,SAAA;eACnB,GAAG,CAAC,GAAJ,CAAA;MADmB,CAAvB;IAjCG;AAoCP,WAAO;MAAC,IAAA,EAAM,IAAP;;EA1C6B;;EA4CxC,MAAM,CAAC,SAAP,CAAiB,gCAAjB,EAAmD,CAAC,SAAD,EAAY,YAAZ,EACC,qCADD,CAAnD;AAlzBA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpRA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAsBA,KAAA,GAAQ,IAAC,CAAC;;EACV,UAAA,GAAa,IAAC,CAAC,KAAK,CAAC;;EAGrB,gBAAA,GAAmB,SAAC,UAAD,EAAa,OAAb,EAAsB,KAAtB,EAA6B,MAA7B,EAAqC,KAArC,EAA4C,KAA5C,EAAmD,EAAnD;AACf,QAAA;IAAA,OAAA,GAAU;IAEV,OAAO,CAAC,IAAR,GAAe,SAAC,OAAD,EAAU,QAAV,EAAoB,SAApB;AACX,UAAA;MAAA,MAAA,GAAS;QAAC,SAAA,EAAW,QAAZ;QAAsB,OAAA,EAAS,SAA/B;;AACT,aAAO,KAAK,CAAC,SAAN,CAAgB,OAAhB,EAAyB,MAAzB;IAFI;IAIf,OAAO,CAAC,MAAR,GAAiB,SAAC,OAAD,EAAU,SAAV,EAAqB,QAArB,EAA+B,IAA/B;AACb,UAAA;MAAA,OAAA,GAAU,EAAE,CAAC,KAAH,CAAA;MAEV,IAAG,IAAA,KAAQ,MAAX;QACI,OAAO,CAAC,MAAR,CAAe,IAAf;AACA,eAAO,OAAO,CAAC,QAFnB;;MAIA,WAAA,GAAc,O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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAsBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,gBAAA,GAAmB,SAAC,KAAD,EAAQ,KAAR,EAAe,KAAf;AACf,QAAA;IAAA,OAAA,GAAU;IAEV,OAAO,CAAC,MAAR,GAAiB,SAAC,SAAD,EAAY,OAAZ;AAEb,UAAA;MAAA,IAAqB,iBAAJ,IAAgB,OAAA,KAAW,EAA5C;QAAA,OAAA,GAAU,IAAV;;MAEA,MAAA,GAAS;QACL,UAAA,EAAY,SADP;QAEL,OAAA,EAAS,OAFJ;;MAIT,GAAA,GAAM,KAAK,CAAC,OAAN,CAAc,MAAd;AACN,aAAO,KAAK,CAAC,IAAN,CAAc,GAAD,GAAK,SAAlB,EAA4B,MAA5B,CAAmC,CAAC,IAApC,CAAyC,CAAA,SAAA,KAAA;eAAA,SAAC,IAAD;AAC5C,iBAAO,IAAI,CAAC;QADgC;MAAA,CAAA,CAAA,CAAA,IAAA,CAAzC;IATM;AAYjB,WAAO,SAAC,QAAD;aACH,QAAQ,CAAC,QAAT,GAAoB;IADjB;EAfQ;;EAmBnB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,gBAAf;;EACT,MAAM,CAAC,OAAP,CAAe,8BAAf,EAA+C,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,gBAAlC,CAA/C;AA5CA;;;;ACAA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAsBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,gBAAA,GAAmB,SAAC,KAAD,EAAQ,KAAR,EAAe,KAAf;AACf,QAAA;IAAA,OAAA,GAAU;IAEV,OAAO,CAAC,GAAR,GAAc,SAAC,EAAD;AACV,aAAO,KAAK,CAAC,QAAN,CAAe,aAAf,EAA8B,EAA9B;IADG;IAGd,OAAO,CAAC,IAAR,GAAe,SAAC,SAAD,EAAY,OAAZ,EAAqB,gBAArB;AACX,UAAA;;QADgC,mBAAiB;;MACjD,MAAA,GAAS;QAAC,OAAA,EAAS,SAAV;;MACT,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,EAAT,EAAa,MAAb,EAAqB,OAAA,IAAW,EAAhC;MACT,IAAG,gBAAH;AACI,eAAO,KAAK,CAAC,cAAN,CAAqB,aAArB,EAAoC,MAApC,EADX;;AAGA,aAAO,KAAK,CAAC,SAAN,CAAgB,aAAhB,EAA+B,MAA/B,EAAuC,OAAA,GAAQ;QAAC,gBAAA,EAAiB,gBAAlB;OAA/C;IANI;IAQf,OAAO,CAAC,UAAR,GAAqB,SAAC,MAAD,EAAS,OAAT;AACjB,UAAA;MAAA,MAAA,GAAS;QAAC,IAAA,EAAM,MAAP;;MACT,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,EAAT,EAAa,MAAb,EAAqB,OAAA,IAAW,EAAhC;AACT,aAAO,KAAK,CAAC,cAAN,CAAqB,aAArB,EAAoC,MAApC;IAHU;IAKrB,OAAO,CAAC,gBAAR,GAA2B,SAAC,EAAD;AACvB,UAAA;MAAA,GAAA,GAAM,KAAK,CAAC,OAAN,CAAc,aAAd;AACN,aAAO,KAAK,CAAC,IAAN,CAAc,GAAD,GAAK,GAAL,GAAQ,EAAR,GAAW,oBAAxB,EAA6C,EAA7C;IAFgB;IAI3B,OAAO,CAAC,qBAAR,GAAgC,SAAC,SAAD,EAAY,IAAZ,EAAkB,qBAAlB;AAC5B,UAAA;MAAA,GAAA,GAAM,KAAK,CAAC,OAAN,CAAc,yBAAd;MACN,MAAA,GAAS;QAAC,UAAA,EAAY,SAAb;QAAwB,gBAAA,EAAkB,IAA1C;QAAgD,qBAAA,EAAuB,qBAAvE;;AACT,aAAO,KAAK,CAAC,IAAN,CAAW,GAAX,EAAgB,MAAhB;IAHqB;AAKhC,WAAO,SAAC,QAAD;aACH,QAAQ,CAAC,WAAT,GAAuB;IADpB;EA5BQ;;EAgCnB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,gBAAf;;EACT,MAAM,CAAC,OAAP,CAAe,iCAAf,EAAkD,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,gBAAlC,CAAlD;AAzDA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,oBAAA,GAAuB,SAAC,cAAD,EAAiB,eAAjB;AACnB,QAAA;IAAA,IAAA,GAAO,SAAC,KAAD,EAAQ,EAAR,EAAY,KAAZ,EAAmB,IAAnB;AACH,UAAA;MAAA,aAAA,GAAgB,SAAA;QACZ,IAAG,cAAc,CAAC,OAAlB;iBACI,IAAI,CAAC,IAAL,CAAA,EADJ;SAAA,MAAA;iBAGI,IAAI,CAAC,IAAL,CAAA,EAHJ;;MADY;aAMhB,KAAK,CAAC,MAAN,CAAa,CAAE,SAAA;AACX,eAAO,cAAc,CAAC;MADX,CAAF,CAAb,EAEG,aAFH;IAPG;AAWP,WAAO;MACH,KAAA,EAAO,EADJ;MAEH,UAAA,EAAY,aAFT;MAGH,YAAA,EAAc,IAHX;MAIH,WAAA,EAAa,2CAJV;MAKH,IAAA,EAAM,IALH;;EAZY;;EAoBvB,oBAAoB,CAAC,OAArB,GAA+B,CAC3B,kBAD2B,EAE3B,mBAF2B;;EAK/B,OAAO,CAAC,MAAR,CAAe,iBAAf,CAAiC,CAAC,SAAlC,CAA4C,eAA5C,EAA6D,oBAA7D;AA9CA;;;;ACAA;;;;;;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jC;UACjB,cAAA,GAAiB,cAAc,CAAC,GAAf,CAAmB,UAAnB,EAA+B,QAA/B;UAEjB,cAAA,GAAiB,KAAC,CAAC,kCAAF,CAAqC,cAArC,EAAqD,YAArD;AAEjB,iBAAO;QANH;MAAA,CAAA,CAAA,CAAA,IAAA,CARR;IAlDe;;;;KAvEG,KAAK,CAAC;;EAyIhC,OAAO,CAAC,MAAR,CAAe,WAAf,CAA2B,CAAC,OAA5B,CAAoC,eAApC,EAAqD,WAArD;AA9JA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,kBAAA,GAAqB,SAAC,WAAD,EAAc,kBAAd;AACjB,QAAA;IAAA,IAAA,GAAO,SAAC,KAAD,EAAQ,EAAR,EAAY,KAAZ,EAAmB,IAAnB;AACH,UAAA;MAAA,IAAA,GAAO,kBAAkB,CAAC,OAAnB,CAAA;MAEP,IAAG,IAAH;QACE,MAAA,GAAS,IAAI,CAAC,GAAL,CAAS,IAAT;eACT,IAAI,CAAC,iBAAL,CAAuB,MAAvB,EAFF;;IAHG;AAOP,WAAO;MACH,UAAA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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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C,wBADlC;AAxLA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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Af,CAA+B,CAAC,OAAhC,CAAwC,4BAAxC,EAAsE,wBAAtE;AAtEA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA,gCAAA;IAAA;;;EAmBA,KAAA,GAAQ,IAAC,CAAC;;EAEJ;;;IACF,yBAAC,CAAC,OAAF,GAAY,CACR,aADQ,EAER,sBAFQ,EAGR,kBAHQ;;IAMC,mCAAC,EAAD,EAAM,kBAAN,EAA2B,cAA3B;MAAC,IAAC,CAAA,KAAD;MAAK,IAAC,CAAA,qBAAD;MAAqB,IAAC,CAAA,iBAAD;IAA3B;;wCAEb,gBAAA,GAAkB,SAAC,SAAD;AACd,aAAO,IAAC,CAAA,kBAAkB,CAAC,QACnB,CAAC,GADF,CACM,KADN,CAEC,CAAC,SAFF,CAEY,SAAC,OAAD;eAAa,OAAO,CAAC,GAAR,CAAY,IAAZ,CAAA,KAAqB;MAAlC,CAFZ;IADO;;wCAMlB,eAAA,GAAiB,SAAC,SAAD,EAAY,WAAZ,EAAyB,SAAzB;AACb,UAAA;MAAA,YAAA,GAAe,IAAC,CAAC,gBAAF,CAAmB,SAAnB;MAEf,QAAA,GAAW,IAAC,CAAA,kBAAkB,CAAC,QAC3B,CAAC,GADM,CACF,KADE,CAEP,CAAC,MAFM,CAEC,YAFD,EAEe,CAAA,SAAA,KAAA;eAAA,SAAC,OAAD;AAClB,cAAA;UAAA,aAAA,GAAgB,OAAO,CAAC,GAAR,CAAY,gBAAZ;UAEhB,IAAG,SAAH;YAAkB,aAAA,GAAlB;WAAA,MAAA;YAAuC,aAAA,GAAvC;;AAEA,iBAAO,OAAO,CAAC,KAAR,CAAc;YACjB,UAAA,EAAY,SADK;YAEjB,cAAA,EAAgB,aAFC;YAGjB,YAAA,EAAc,WAHG;WAAd;QALW;MAAA,CAAA,CAAA,CAAA,IAAA,CAFf;aAaX,IAAC,CAAA,kBAAkB,CAAC,WAApB,CAAgC,QAAhC;IAhBa;;wCAkBjB,qBAAA,GAAuB,SAAC,WAAD,EAAc,SAAd;AACnB,UAAA;MAAA,aAAA,GAAgB,IAAC,CAAA,cAAc,CAAC,OAAO,CAAC,GAAxB,CAA4B,gBAA5B;MAEhB,IAAG,SAAH;QAAkB,aAAA,GAAlB;OAAA,MAAA;QAAuC,aAAA,GAAvC;;MAEA,OAAA,GAAU,IAAC,CAAA,cAAc,CAAC,OAAO,CAAC,KAAxB,CAA8B;QACpC,UAAA,EAAY,SADwB;QAEpC,cAAA,EAAgB,aAFoB;QAGpC,YAAA,EAAc,WAHsB;OAA9B;aAMV,IAAC,CAAA,cAAc,CAAC,UAAhB,CAA2B,OAA3B;IAXmB;;wCAavB,KAAA,GAAO,SAAC,SAAD,EAAY,WAAZ;AACH,aAAO,IAAC,CAAA,EAAE,CAAC,QAAQ,CAAC,YAAb,CAA0B,SAA1B,EAAqC,WAArC,CAAiD,CAAC,IAAlD,CAAuD,CAAA,SAAA,KAAA;eAAA,SAAA;UAC1D,KAAC,CAAC,eAAF,CAAkB,SAAlB,EAA6B,WAA7B,EAA0C,IAA1C;iBACA,KAAC,CAAC,qBAAF,CAAwB,WAAxB,EAAqC,IAArC;QAF0D;MAAA,CAAA,CAAA,CAAA,IAAA,CAAvD;IADJ;;wCAKP,OAAA,GAAS,SAAC,SAAD;AACL,aAAO,IAAC,CAAA,EAAE,CAAC,QAAQ,CAAC,cAAb,CAA4B,SAA5B,CAAsC,CAAC,IAAvC,CAA4C,CAAA,SAAA,KAAA;eAAA,SAAA;UAC/C,KAAC,CAAC,eAAF,CAAkB,SAAlB,EAA6B,IAA7B,EAAmC,KAAnC;iBACA,KAAC,CAAC,qBAAF,CAAwB,IAAxB,EAA8B,KAA9B;QAF+C;MAAA,CAAA,CAAA,CAAA,IAAA,CAA5C;IADF;;;;KAnD2B,KAAK,CAAC;;EAwD9C,OAAO,CAAC,MAAR,CAAe,eAAf,CAA+B,CAAC,OAAhC,CAAwC,6BAAxC,EAAuE,yBAAvE;AA7EA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,UAAA,GAAa,SAAA,GAAA;;EAEb,QAAA,GAAW,SAAC,WAAD,EAAc,IAAd,EAAoB,uBAApB;AACP,QAAA;IAAA,OAAA,GAAU;IAEV,OAAO,CAAC,gBAAR,GAA2B,SAAC,WAAD;AACvB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,UAApB;MAEN,GAAA,GAAS,GAAD,GAAK,gBAAL,GAAqB;AAE7B,aAAO,IAAI,CAAC,GAAL,CAAS,GAAT,CACH,CAAC,IADE,CACG,SAAC,MAAD;AACF,eAAO,SAAS,CAAC,MAAV,CAAiB,MAAM,CAAC,IAAxB;MADL,CADH;IALgB;IAS3B,OAAO,CAAC,mBAAR,GAA8B,SAAC,MAAD,EAAS,QAAT;AAC1B,UAAA;;QADmC,WAAS;;MAC5C,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,UAApB;MACN,WAAA,GAAc;MAEd,IAAG,CAAC,QAAJ;QACI,WAAW,CAAC,OAAZ,GAAsB;UAClB,sBAAA,EAAwB,GADN;UAD1B;;MAKA,MAAA,GAAS;QAAC,QAAA,EAAU,MAAX;QAAmB,UAAA,EAAY,yBAA/B;;AAET,aAAO,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,MAAd,EAAsB,WAAtB,CACH,CAAC,IADE,CACG,SAAC,MAAD;AACF,eAAO,SAAS,CAAC,MAAV,CAAiB,MAAM,CAAC,IAAxB;MADL,CADH;IAXmB;IAe9B,OAAO,CAAC,eAAR,GAA0B,SAAC,SAAD;AACtB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,UAApB;MACN,GAAA,GAAS,GAAD,GAAK,GAAL,GAAQ;AAEhB,aAAO,IAAI,CAAC,GAAL,CAAS,GAAT,CACH,CAAC,IADE,CACG,SAAC,MAAD;AACF,eAAO,SAAS,CAAC,MAAV,CAAiB,MAAM,CAAC,IAAxB;MADL,CADH;IAJe;IAQ1B,OAAO,CAAC,eAAR,GAA0B,SAAC,QAAD;AACtB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,4BAApB;AACN,aAAO,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,QAAf;IAFe;IAI1B,OAAO,CAAC,WAAR,GAAsB,SAAC,SAAD,EAAY,IAAZ;AAClB,UAAA;MAAA,MAAA,GAAS;QACL,IAAA,EAAM,IADD;;MAIT,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,kBAApB;MACN,GAAA,GAAS,GAAD,GAAK,GAAL,GAAQ;AAEhB,aAAO,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,MAAd,CAAqB,CAAC,IAAtB,CAA2B,SAAC,MAAD;QAC9B,MAAA,GAAS,SAAS,CAAC,MAAV,CAAiB,MAAjB;AACT,eAAO,uBAAA,CAAwB,MAAxB;MAFuB,CAA3B;IARW;IAYtB,OAAO,CAAC,WAAR,GAAsB,SAAC,SAAD;AAClB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,cAApB,EAAoC,SAApC;AACN,aAAO,IAAI,CAAC,IAAL,CAAU,GAAV;IAFW;IAItB,OAAO,CAAC,aAAR,GAAwB,SAAC,SAAD;AACpB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,gBAApB,EAAsC,SAAtC;AACN,aAAO,IAAI,CAAC,IAAL,CAAU,GAAV;IAFa;IAIxB,OAAO,CAAC,YAAR,GAAuB,SAAC,SAAD,EAAY,YAAZ;AACnB,UAAA;MAAA,IAAA,GAAO;QACH,aAAA,EAAe,YADZ;;MAGP,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,eAApB,EAAqC,SAArC;AACN,aAAO,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,IAAf;IALY;IAOvB,OAAO,CAAC,cAAR,GAAyB,SAAC,SAAD;AACrB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,iBAApB,EAAuC,SAAvC;AACN,aAAO,IAAI,CAAC,IAAL,CAAU,GAAV;IAFc;AAIzB,WAAO,SAAA;AACH,aAAO;QAAC,UAAA,EAAY,OAAb;;IADJ;EAtEA;;EAyEX,QAAQ,CAAC,OAAT,GAAmB,CAAC,SAAD,EAAY,SAAZ,EAAuB,2BAAvB;;EAEnB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,iBAAf;;EACT,MAAM,CAAC,OAAP,CAAe,qBAAf,EAAsC,QAAtC;AAjGA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,QAAA,GAAW,SAAC,WAAD,EAAc,IAAd,EAAoB,uBAApB;AACP,QAAA;IAAA,OAAA,GAAU;IAEV,OAAO,CAAC,iBAAR,GAA4B,SAAC,QAAD;AACxB,UAAA;MAAA,GAAA,GAAM,WAAW,CAAC,OAAZ,CAAoB,aAApB;MAEN,WAAA,GAAc;QACV,OAAA,EAAS;UACL,sBAAA,EAAwB,GADnB;SADC;;MAMd,MAAA,GAAS;QACL,QAAA,EAAU,QADL;;AAIT,aAAO,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,MAAd,EAAsB,WAAtB,CACH,CAAC,IADE,CACG,SAAC,MAAD;AACF,eAAO,SAAS,CAAC,MAAV,CAAiB,MAAM,CAAC,IAAxB;MADL,CADH;IAbiB;IAiB5B,OAAO,CAAC,QAAR,GAAmB,SAAC,MAAD;AACf,UAAA;MAAA,GAAA,GAAM,WAAW,CA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AAD,GAAK,GAAL,GAAQ;AAEhB,aAAO,IAAI,CAAC,GAAL,CAAS,GAAT,EAAc,MAAd,CAAqB,CAAC,IAAtB,CAA2B,SAAC,MAAD;QAC9B,MAAA,GAAS,SAAS,CAAC,MAAV,CAAiB,MAAjB;AACT,eAAO,uBAAA,CAAwB,MAAxB;MAFuB,CAA3B;IARe;AAY1B,WAAO,SAAA;AACH,aAAO;QAAC,OAAA,EAAS,OAAV;;IADJ;EA7GA;;EAgHX,QAAQ,CAAC,OAAT,GAAmB,CAAC,SAAD,EAAY,SAAZ,EAAuB,2BAAvB;;EAEnB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,iBAAf;;EACT,MAAM,CAAC,OAAP,CAAe,kBAAf,EAAmC,QAAnC;AAtIA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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,OAAb;QAAb;MAAA,CAAA,CAAA,CAAA,IAAA,CAA9C;IAHG;;;;;;EAKlB,OAAO,CAAC,MAAR,CAAe,aAAf,CAA6B,CAAC,OAA9B,CAAsC,kBAAtC,EAA0D,cAA1D;AA1EA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,SAAA,GAAY,IAAC,CAAC,KAAK,CAAC;;EAEd;IACF,qBAAC,CAAC,OAAF,GAAY,CACR,YADQ;;oCAIZ,oBAAA,GAAsB;MAClB,QAAA,EAAU,sBADQ;MAElB,SAAA,EAAW,uBAFO;MAGlB,kBAAA,EAAoB,2BAHF;MAIlB,QAAA,EAAU,sBAJQ;MAKlB,aAAA,EAAe,2BALG;MAMlB,UAAA,EAAY,wBANM;MAOlB,UAAA,EAAY,wBAPM;MAQlB,MAAA,EAAQ,oBARU;MASlB,YAAA,EAAc,wBATI;MAUlB,YAAA,EAAc,0BAVI;;;oCAatB,OAAA,GAAS;MACL,QAAA,EAAU,SAAC,QAAD,EAAW,KAAX;AACN,YAAA;QAAA,IAAA,GAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,CAAf;QAEP,IAAG,IAAI,CAAC,GAAL,CAAS,oBAAT,CAAH;UACI,UAAA,GAAa,IAAC,CAAA,SAAS,CAAC,OAAX,CAAmB,yBAAnB,EAA8C;YAAC,QAAA,EAAU,IAAI,CAAC,GAAL,CAAS,UAAT,CAAX;WAA9C;UACb,GAAA,GAAM;AAEN,iBAAO,IAAC,CAAC,QAAF,CAAW,GAAX,EAAgB,IAAI,CAAC,GAAL,CAAS,MAAT,CAAhB,EAAkC,UAAlC,EAJX;SAAA,MAAA;AAMI,iBAAO,IAAC,CAAC,gBAAF,CAAmB,IAAI,CAAC,GAAL,CAAS,MAAT,CAAnB,EANX;;MAHM,CADL;MAYL,UAAA,EAAY,SAAC,QAAD,EAAW,KAAX;AACR,YAAA;QAAA,UAAA,GAAa,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf;AAEb,eAAO,IAAC,CAAA,SAAS,CAAC,OAAX,CAAmB,IAAC,CAAC,oBAAqB,CAAA,UAAA,CAA1C;MAHC,CAZP;MAiBL,YAAA,EAAc,SAAC,QAAD,EAAW,KAAX;AACV,YAAA;QAAA,GAAA,GAAM;AAEN,eAAO,IAAC,CAAC,QAAF,CAAW,GAAX,EAAgB,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,SAAT,EAAoB,MAApB,CAAf,CAAhB;MAHG,CAjBT;MAsBL,SAAA,EAAW,SAAC,QAAD,EAAW,KAAX;AACP,YAAA;QAAA,IAAG,CAAC,CAAC,OAAF,CAAU,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,CAAf,CAA+C,CAAC,IAAhD,CAAA,CAAV,CAAH;UACI,KAAA,GAAQ,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,CAAf,CAA+C,CAAC,GAAhD,CAAoD,CAApD;UAGR,IAAG,KAAA,KAAS,IAAT,IAAiB,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD,aAArE;YACI,KAAA,GAAQ,IAAC,CAAA,SAAS,CAAC,OAAX,CAAmB,4BAAnB,EADZ;;AAGA,iBAAO,MAPX;SAAA,MAAA;AASI,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,CAAf,CAA+C,CAAC,KAAhD,CAAA,CAAuD,CAAC,GAAxD,CAA4D,CAA5D,EATX;;MADO,CAtBN;MAkCL,WAAA,EAAa,SAAC,QAAD,EAAW,KAAX;AACT,YAAA;QAAA,GAAA,GAAM;AAEN,eAAO,IAAC,CAAC,QAAF,CAAW,GAAX,EAAgB,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,CAAf,CAAhB;MAHE,CAlCR;MAuCL,OAAA,EAAS,SAAC,QAAD,EAAW,KAAX;AACL,YAAA;QAAA,GAAA,GAAM,IAAC,CAAC,eAAF,CAAkB,QAAlB,EAA4B,KAA5B,CAAkC,CAAC,GAAnC,CAAuC,WAAvC;QAEN,QAAA,GAAW;UAAC,GAAA,EAAK,kBAAN;;QACX,GAAA,GAAM,IAAC,CAAC,gBAAF,CAAmB,QAAnB;QAEN,IAAA,GAAO,GAAA,GAAM,GAAG,CAAC,GAAJ,CAAQ,KAAR,CAAN,GAAuB,GAAvB,GAA6B,GAAG,CAAC,GAAJ,CAAQ,SAAR;AAEpC,eAAO,IAAC,CAAC,QAAF,CAAW,GAAX,EAAgB,IAAhB;MARF,CAvCJ;MAiDL,QAAA,EAAU,SAAC,QAAD,EAAW,KAAX;AACN,YAAA;QAAA,GAAA,GAAM,IAAC,CAAC,eAAF,CAAkB,QAAlB,EAA4B,KAA5B;QACN,GAAA,GAAM,IAAC,CAAC,gBAAF,CAAmB,KAAnB;QAEN,IAAG,KAAK,CAAC,GAAN,KAAa,UAAhB;UACI,IAAA,GAAO,SAAA,CAAU,GAAG,CAAC,GAAJ,CAAQ,MAAR,CAAV,EADX;SAAA,MAEK,IAAG,KAAK,CAAC,GAAN,KAAa,WAAhB;UACD,IAAA,GAAO,GAAG,CAAC,GAAJ,CAAQ,MAAR,EADN;SAAA,MAAA;UAGD,IAAA,GAAO,GAAA,GAAM,GAAG,CAAC,GAAJ,CAAQ,KAAR,CAAN,GAAuB,GAAvB,GAA6B,GAAG,CAAC,GAAJ,CAAQ,SAAR,EAHnC;;AAKL,eAAO,IAAC,CAAC,QAAF,CAAW,GAAX,EAAgB,IAAhB;MAXD,CAjDL;MA8DL,SAAA,EAAW,SAAC,QAAD,EAAW,KAAX;AACP,eAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,CAAf,CAA+C,CAAC,MAAhD,CAAA,CAAwD,CAAC,KAAzD,CAAA;MADA,CA9DN;;;IAkEI,+BAAC,SAAD;MAAC,IAAC,CAAA,YAAD;IAAD;;oCAGb,qBAAA,GAAuB,SAAC,KAAD,EAAQ,QAAR,EAAkB,KAAlB;AACnB,aAAO,IAAC,CAAC,OAAQ,CAAA,KAAA,CAAM,CAAC,IAAjB,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC,KAAtC;IADY;;oCAGvB,eAAA,GAAiB,SAAC,QAAD,EAAW,KAAX;AACb,aAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,KAAK,CAAC,GAAf,CAAf;IADM;;oCAGjB,gBAAA,GAAkB,SAAC,KAAD;AACd,UAAA;MAAA,GAAA,GAAM;QACF,OAAA,EAAS,CAAC,uBAAD,EAA0B,yFAA1B,CADP;QAEF,UAAA,EAAY,CAAC,mBAAD,EAAsB,2FAAtB,CAFV;QAGF,MAAA,EAAQ,CAAC,sBAAD,EAAyB,yFAAzB,CAHN;QAIF,WAAA,EAAa,CAAC,4BAAD,EAA+B,yFAA/B,CAJX;QAKF,kBAAA,EAAoB,CAAC,4BAAD,EAA+B,sGAA/B,CALlB;QAMF,WAAA,EAAa,CAAC,mBAAD,EAAsB,6FAAtB,CANX;;AASN,aAAO,GAAI,CAAA,KAAK,CAAC,GAAN,CAAW,CAAA,CAAA,CAAf,GAAoB,GAAI,CAAA,KAAK,CAAC,GAAN,CAAW,CAAA,CAAA;IAV5B;;oCAYlB,QAAA,GAAU,SAAC,GAAD,EAAM,IAAN,EAAY,KAAZ;MACN,KAAA,GAAQ,KAAA,IAAS;AAEjB,aAAO,CAAA,CAAE,KAAF,CACH,CAAC,IADE,CACG,QADH,EACa,GADb,CAEH,CAAC,IAFE,CAEG,IAFH,CAGH,CAAC,IAHE,CAGG,OAHH,EAGY,KAHZ,CAIH,CAAC,IAJE,CAIG,WAJH;IAHD;;oCASV,gBAAA,GAAkB,SAAC,IAAD;AACd,UAAA;MAAA,KAAA,GAAQ,KAAA,IAAS;AAEjB,aAAO,CAAA,CAAE,QAAF,CACH,CAAC,QADE,CACO,UADP,CAEH,CAAC,IAFE,CAEG,IAFH,CAGH,CAAC,IAHE,CAGG,WAHH;IAHO;;oCAQlB,UAAA,GAAY,SAAC,QAAD,EAAW,KAAX,EAAkB,aAAlB;AACR,UAAA;MAAA,MAAA,GAAS;MAET,aAAa,CAAC,gBAAgB,CAAC,OAA/B,CAAuC,CAAA,SAAA,KAAA;eAAA,SAAC,KAAD;iBACnC,MAAO,CAAA,KAAA,CAAP,GAAgB,KAAC,CAAC,qBAAF,CAAwB,KAAxB,EAA+B,QAA/B,EAAyC,KAAzC;QADmB;MAAA,CAAA,CAAA,CAAA,IAAA,CAAvC;AAGA,aAAO;IANC;;oCAQZ,QAAA,GAAU,SAAC,QAAD,EAAW,KAAX,EAAkB,IAAlB;AACN,aAAO,IAAC,CAAA,SAAS,CAAC,OAAX,CAAmB,IAAI,CAAC,GAAxB,EAA6B,IAAC,CAAC,UAAF,CAAa,QAAb,EAAuB,KAAvB,EAA8B,IAA9B,CAA7B;IADD;;;;;;EAGd,OAAO,CAAC,MAAR,CAAe,mBAAf,CACI,CAAC,OADL,CACa,yBADb,EACwC,qBADxC;AA1JA;;;;ACAA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,YAAA,GAAe,SAAC,QAAD,EAAW,KAAX;AACX,QAAA;IAAA,KAAA,GAAQ;MACJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa;QADjB,CADX;QAGI,GAAA,EAAK,qBAHT;QAII,gBAAA,EAAkB,CAAC,cAAD,CAJtB;QAKI,MAAA,EAAQ,SAAC,QAAD;AACJ,iBAAO,SAAS,CAAC,GAAV,CAAc;YACjB,IAAA,EAAM,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,CAAf,CADW;YAEjB,IAAA,EAAM,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,CAAf,CAFW;WAAd;QADH,CALZ;OADI,EAYJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,SAAb,IAA0B,KAAK,CAAC,IAAN,KAAc;QAD5C,CADX;QAGI,GAAA,EAAK,sBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,CAJtB;QAKI,WAAA,EAAa,SAAC,QAAD;AACT,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,SAAT,EAAoB,aAApB,CAAf;QADE,CALjB;OAZI,EAoBJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,IAAN,KAAc,QAAd,IACF,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CADE,IAEF,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD;QAHnD,CADX;QAKI,GAAA,EAAK,4BALT;QAMI,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CANtB;OApBI,EA4BJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,WAAb,IAA4B,KAAK,CAAC,IAAN,KAAc;QAD9C,CADX;QAGI,GAAA,EAAK,qBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,EAA6B,UAA7B,CAJtB;OA5BI,EAkCJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,OAAb,IAAwB,KAAK,CAAC,IAAN,KAAc;QAD1C,CADX;QAGI,GAAA,EAAK,wBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,EAA6B,UAA7B,CAJtB;OAlCI,EAwCJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,UAAb,IAA2B,KAAK,CAAC,IAAN,KAAc;QAD7C,CADX;QAGI,GAAA,EAAK,uBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,EAA6B,UAA7B,CAJtB;OAxCI,EA8CJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IAAuB,KAAK,CAAC,IAAN,KAAc,QAArC,IAAiD,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAAf;QADtD,CADX;QAGI,GAAA,EAAK,uBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,EAA6B,UAA7B,CAJtB;OA9CI,EAoDJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IAAuB,KAAK,CAAC,IAAN,KAAc,QAArC,IAAiD,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAAf;QADrD,CADX;QAGI,GAAA,EAAK,+BAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,EAA6B,UAA7B,EAAyC,SAAzC,CAJtB;OApDI,EA0DJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,WAAb,IAA4B,KAAK,CAAC,IAAN,KAAc;QAD9C,CADX;QAGI,GAAA,EAAK,4BAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,cAAb,EAA6B,UAA7B,CAJtB;OA1DI,EAgEJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,SAAT,CAAf,CAAA,IAAuC,KAAK,CAAC,GAAN,KAAa;QADxD,CADX;QAGI,GAAA,EAAK,yBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAJtB;QAKI,WAAA,EAAa,SAAC,QAAD;AACT,iBAAO,CAAA,CAAE,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,cAAT,CAAf,CAAF,CAA2C,CAAC,IAA5C,CAAA;QADE,CALjB;OAhEI,EAwEJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,SAAT,CAAf,CAAA,IAAuC,KAAK,CAAC,GAAN,KAAa;QADxD,CADX;QAGI,GAAA,EAAK,4BAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAJtB;QAKI,WAAA,EAAa,SAAC,QAAD;AACT,iBAAO,CAAA,CAAE,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,cAAT,CAAf,CAAF,CAA2C,CAAC,IAA5C,CAAA;QADE,CALjB;OAxEI,EAgFJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,SAAT,CAAf,CAAA,IAAuC,KAAK,CAAC,GAAN,KAAa;QADxD,CADX;QAGI,GAAA,EAAK,2BAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAJtB;QAKI,WAAA,EAAa,SAAC,QAAD;AACT,iBAAO,CAAA,CAAE,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,cAAT,CAAf,CAAF,CAA2C,CAAC,IAA5C,CAAA;QADE,CALjB;OAhFI,EAwFJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAAA,IACD,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD,eADhD,IAED,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,EAAgC,eAAhC,CAAf,CAFC,IAGD,KAAK,CAAC,IAAN,KAAc;QAJjB,CADX;QAMI,GAAA,EAAK,mBANT;QAOI,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAPtB;OAxFI,EAiGJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;UACH,IAAG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAAA,IACG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD,eADpD,IAEG,KAAK,CAAC,IAAN,KAAc,QAFpB;AAII,mBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,EAAgC,WAAhC,CAAf,CAA4D,CAAC,GAA7D,CAAiE,CAAjE,CAAA,KAAuE,KAJlF;;AAMA,iBAAO;QAPJ,CADX;QASI,GAAA,EAAK,oCATT;QAUI,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAVtB;OAjGI,EA6GJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAAA,IACD,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD,eADhD,IAED,KAAK,CAAC,IAAN,KAAc;QAHjB,CADX;QAKI,GAAA,EAAK,6BALT;QAMI,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,EAAyB,aAAzB,CANtB;OA7GI,EAqHJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;UACH,IAAG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAAA,IACG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD,SADpD,IAEG,KAAK,CAAC,IAAN,KAAc,QAFpB;AAGI,mBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,EAAgC,YAAhC,CAAf,CAA6D,CAAC,GAA9D,CAAkE,CAAlE,CAAA,KAAwE,KAHnF;;AAKA,iBAAO;QANJ,CADX;QAQI,GAAA,EAAK,kBART;QASI,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CATtB;QAUI,WAAA,EAAa,SAAC,QAAD;UACT,IAAG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,EAAgC,mBAAhC,CAAf,CAAH;AACI,mBAAO,CAAA,CAAE,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,EAAgC,mBAAhC,CAAf,CAAoE,CAAC,GAArE,CAAyE,CAAzE,CAAF,CAA8E,CAAC,IAA/E,CAAA,EADX;WAAA,MAAA;AAGI,mBAAO,MAHX;;QADS,CAVjB;OArHI,EAqIJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;UACH,IAAG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAAA,IACG,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD,SADpD,IAEG,KAAK,CAAC,IAAN,KAAc,QAFpB;AAGI,mBAAO,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,OAAvB,EAAgC,YAAhC,CAAf,CAA6D,CAAC,GAA9D,CAAkE,CAAlE,CAAA,KAAwE,MAHnF;;AAKA,iBAAO;QANJ,CADX;QAQI,GAAA,EAAK,oBART;QASI,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CATtB;OArII,EAgJJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,WAAb,IAA4B,KAAK,CAAC,IAAN,KAAc;QAD9C,CADX;QAGI,GAAA,EAAK,4BAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAJtB;OAhJI,EAsJJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,UAAb,IAA2B,KAAK,CAAC,IAAN,KAAc;QAD7C,CADX;QAGI,GAAA,EAAK,uBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,EAAa,UAAb,CAJtB;OAtJI,EA4JJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,WAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAFG,IAGH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD;QAJlD,CADX;QAMI,GAAA,EAAK,4BANT;QAOI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,EAAuC,WAAvC,EAAoD,WAApD,CAPtB;OA5JI,EAqKJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,WAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAFG,IAGH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD;QAJlD,CADX;QAMI,GAAA,EAAK,qBANT;QAOI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,CAPtB;OArKI,EA8KJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,WAAb,IACH,KAAK,CAAC,IAAN,KAAc;QAFf,CADX;QAII,GAAA,EAAK,oCAJT;QAKI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,EAAuC,WAAvC,CALtB;OA9KI,EAqLJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,OAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAFG,IAGH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD;QAJlD,CADX;QAMI,GAAA,EAAK,wBANT;QAOI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,CAPtB;OArLI,EA8LJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,OAAb,IACH,KAAK,CAAC,IAAN,KAAc;QAFf,CADX;QAII,GAAA,EAAK,uCAJT;QAKI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,EAAuC,WAAvC,CALtB;OA9LI,EAqMJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAAf,CAFE,IAGH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAHG,IAIH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD;QALlD,CADX;QAOI,GAAA,EAAK,uBAPT;QAQI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,CARtB;OArMI,EA+MJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAAf,CAFG,IAGH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,CAAf,CAHG,IAIH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,YAAT,EAAuB,KAAvB,CAAf,CAAA,KAAiD;QALlD,CADX;QAOI,GAAA,EAAK,+BAPT;QAQI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,EAAuC,SAAvC,CARtB;OA/MI,EAyNJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,CAAC,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAAf;QAHF,CADX;QAKI,GAAA,EAAK,sCALT;QAMI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,EAAuC,WAAvC,CANtB;OAzNI,EAiOJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IACH,KAAK,CAAC,IAAN,KAAc,QADX,IAEH,QAAQ,CAAC,KAAT,CAAe,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,CAAf;QAHD,CADX;QAKI,GAAA,EAAK,yCALT;QAMI,gBAAA,EAAkB,CAAC,UAAD,EAAa,YAAb,EAA2B,UAA3B,EAAuC,SAAvC,EAAkD,WAAlD,CANtB;OAjOI,EAyOJ;QACI,KAAA,EAAO,SAAC,QAAD,EAAW,KAAX;AACH,iBAAO,KAAK,CAAC,GAAN,KAAa,MAAb,IAAuB,KAAK,CAAC,IAAN,KAAc;QADzC,CADX;QAGI,GAAA,EAAK,mBAHT;QAII,gBAAA,EAAkB,CAAC,UAAD,CAJtB;OAzOI;;AAiPR,WAAO,CAAC,CAAC,IAAF,CAAO,KAAP,EAAc,SAAC,GAAD;AACjB,aAAO,GAAG,CAAC,KAAJ,CAAU,QAAV,EAAoB,KAApB;IADU,CAAd;EAlPI;;EAqPT;;;+BACF,OAAA,GAAS,SAAC,QAAD,EAAW,KAAX;aAAqB,YAAA,CAAa,QAAb,EAAuB,KAAvB;IAArB;;;;;;EAEb,OAAO,CAAC,MAAR,CAAe,mBAAf,CACI,CAAC,OADL,CACa,wBADb,EACuC,gBADvC;AA3QA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","file":"app.js","sourcesContent":["###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: app.coffee\n###\n\n@taiga = taiga = {}\n@.taigaContribPlugins = @.taigaContribPlugins or []\n\n# Generic function for generate hash from a arbitrary length\n# collection of parameters.\ntaiga.generateHash = (components=[]) ->\n components = _.map(components, (x) -> JSON.stringify(x))\n return hex_sha1(components.join(\":\"))\n\n\ntaiga.generateUniqueSessionIdentifier = ->\n date = (new Date()).getTime()\n randomNumber = Math.floor(Math.random() * 0x9000000)\n return taiga.generateHash([date, randomNumber])\n\n\ntaiga.sessionId = taiga.generateUniqueSessionIdentifier()\n\n\nconfigure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider,\n $compileProvider, $translateProvider, $animateProvider) ->\n\n $animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/)\n\n # wait until the trasnlation is ready to resolve the page\n originalWhen = $routeProvider.when\n\n $routeProvider.when = (path, route) ->\n route.resolve || (route.resolve = {})\n angular.extend(route.resolve, {\n languageLoad: [\"$q\", \"$translate\", ($q, $translate) ->\n deferred = $q.defer()\n\n $translate().then () -> deferred.resolve()\n\n return deferred.promise\n ]\n })\n\n return originalWhen.call($routeProvider, path, route)\n\n $routeProvider.when(\"/\",\n {\n templateUrl: \"home/home.html\",\n access: {\n requiresLogin: true\n },\n loader: true,\n title: \"HOME.PAGE_TITLE\",\n loader: true,\n description: \"HOME.PAGE_DESCRIPTION\",\n joyride: \"dashboard\"\n }\n )\n\n $routeProvider.when(\"/projects/\",\n {\n templateUrl: \"projects/listing/projects-listing.html\",\n access: {\n requiresLogin: true\n },\n title: \"PROJECTS.PAGE_TITLE\",\n description: \"PROJECTS.PAGE_DESCRIPTION\",\n loader: true,\n controller: \"ProjectsListing\",\n controllerAs: \"vm\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/\",\n {\n templateUrl: \"projects/project/project.html\",\n loader: true,\n controller: \"Project\",\n controllerAs: \"vm\"\n section: \"project-timeline\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/search\",\n {\n templateUrl: \"search/search.html\",\n reloadOnSearch: false,\n section: \"search\",\n loader: true\n }\n )\n\n $routeProvider.when(\"/project/:pslug/backlog\",\n {\n templateUrl: \"backlog/backlog.html\",\n loader: true,\n section: \"backlog\",\n joyride: \"backlog\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/kanban\",\n {\n templateUrl: \"kanban/kanban.html\",\n loader: true,\n section: \"kanban\",\n joyride: \"kanban\"\n }\n )\n\n # Milestone\n $routeProvider.when(\"/project/:pslug/taskboard/:sslug\",\n {\n templateUrl: \"taskboard/taskboard.html\",\n loader: true,\n section: \"backlog\"\n }\n )\n\n # User stories\n $routeProvider.when(\"/project/:pslug/us/:usref\",\n {\n templateUrl: \"us/us-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n }\n )\n\n # Tasks\n $routeProvider.when(\"/project/:pslug/task/:taskref\",\n {\n templateUrl: \"task/task-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n }\n )\n\n # Wiki\n $routeProvider.when(\"/project/:pslug/wiki\",\n {redirectTo: (params) -> \"/project/#{params.pslug}/wiki/home\"}, )\n $routeProvider.when(\"/project/:pslug/wiki/:slug\",\n {\n templateUrl: \"wiki/wiki.html\",\n loader: true,\n section: \"wiki\"\n }\n )\n\n # Team\n $routeProvider.when(\"/project/:pslug/team\",\n {\n templateUrl: \"team/team.html\",\n loader: true,\n section: \"team\"\n }\n )\n\n # Issues\n $routeProvider.when(\"/project/:pslug/issues\",\n {\n templateUrl: \"issue/issues.html\",\n loader: true,\n section: \"issues\"\n }\n )\n $routeProvider.when(\"/project/:pslug/issue/:issueref\",\n {\n templateUrl: \"issue/issues-detail.html\",\n loader: true,\n section: \"issues\"\n }\n )\n\n # Admin - Project Profile\n $routeProvider.when(\"/project/:pslug/admin/project-profile/details\",\n {\n templateUrl: \"admin/admin-project-profile.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/default-values\",\n {\n templateUrl: \"admin/admin-project-default-values.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/modules\",\n {\n templateUrl: \"admin/admin-project-modules.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/export\",\n {\n templateUrl: \"admin/admin-project-export.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/reports\",\n {\n templateUrl: \"admin/admin-project-reports.html\",\n section: \"admin\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/admin/project-values/status\",\n {\n templateUrl: \"admin/admin-project-values-status.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/points\",\n {\n templateUrl: \"admin/admin-project-values-points.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/priorities\",\n {\n templateUrl: \"admin/admin-project-values-priorities.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/severities\",\n {\n templateUrl: \"admin/admin-project-values-severities.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/types\",\n {\n templateUrl: \"admin/admin-project-values-types.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/custom-fields\",\n {\n templateUrl: \"admin/admin-project-values-custom-fields.html\",\n section: \"admin\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/admin/memberships\",\n {\n templateUrl: \"admin/admin-memberships.html\",\n section: \"admin\"\n }\n )\n # Admin - Roles\n $routeProvider.when(\"/project/:pslug/admin/roles\",\n {\n templateUrl: \"admin/admin-roles.html\",\n section: \"admin\"\n }\n )\n\n # Admin - Third Parties\n $routeProvider.when(\"/project/:pslug/admin/third-parties/webhooks\",\n {\n templateUrl: \"admin/admin-third-parties-webhooks.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/third-parties/github\",\n {\n templateUrl: \"admin/admin-third-parties-github.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gitlab\",\n {\n templateUrl: \"admin/admin-third-parties-gitlab.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/third-parties/bitbucket\",\n {\n templateUrl: \"admin/admin-third-parties-bitbucket.html\",\n section: \"admin\"\n }\n )\n # Admin - Contrib Plugins\n $routeProvider.when(\"/project/:pslug/admin/contrib/:plugin\",\n {templateUrl: \"contrib/main.html\"})\n\n # User settings\n $routeProvider.when(\"/user-settings/user-profile\",\n {templateUrl: \"user/user-profile.html\"})\n $routeProvider.when(\"/user-settings/user-change-password\",\n {templateUrl: \"user/user-change-password.html\"})\n $routeProvider.when(\"/user-settings/mail-notifications\",\n {templateUrl: \"user/mail-notifications.html\"})\n $routeProvider.when(\"/change-email/:email_token\",\n {templateUrl: \"user/change-email.html\"})\n $routeProvider.when(\"/cancel-account/:cancel_token\",\n {templateUrl: \"user/cancel-account.html\"})\n\n # User profile\n $routeProvider.when(\"/profile\",\n {\n templateUrl: \"profile/profile.html\",\n loader: true,\n access: {\n requiresLogin: true\n },\n controller: \"Profile\",\n controllerAs: \"vm\"\n }\n )\n\n $routeProvider.when(\"/profile/:slug\",\n {\n templateUrl: \"profile/profile.html\",\n loader: true,\n controller: \"Profile\",\n controllerAs: \"vm\"\n }\n )\n\n # Auth\n $routeProvider.when(\"/login\",\n {\n templateUrl: \"auth/login.html\",\n title: \"LOGIN.PAGE_TITLE\",\n description: \"LOGIN.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/register\",\n {\n templateUrl: \"auth/register.html\",\n title: \"REGISTER.PAGE_TITLE\",\n description: \"REGISTER.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/forgot-password\",\n {\n templateUrl: \"auth/forgot-password.html\",\n title: \"FORGOT_PASSWORD.PAGE_TITLE\",\n description: \"FORGOT_PASSWORD.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/change-password/:token\",\n {\n templateUrl: \"auth/change-password-from-recovery.html\",\n title: \"CHANGE_PASSWORD.PAGE_TITLE\",\n description: \"CHANGE_PASSWORD.PAGE_TITLE\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/invitation/:token\",\n {\n templateUrl: \"auth/invitation.html\",\n title: \"INVITATION.PAGE_TITLE\",\n description: \"INVITATION.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/external-apps\",\n {\n templateUrl: \"external-apps/external-app.html\",\n title: \"EXTERNAL_APP.PAGE_TITLE\",\n description: \"EXTERNAL_APP.PAGE_DESCRIPTION\",\n controller: \"ExternalApp\",\n controllerAs: \"vm\",\n disableHeader: true,\n mobileViewport: true\n }\n )\n\n # Errors/Exceptions\n $routeProvider.when(\"/error\",\n {templateUrl: \"error/error.html\"})\n $routeProvider.when(\"/not-found\",\n {templateUrl: \"error/not-found.html\"})\n $routeProvider.when(\"/permission-denied\",\n {templateUrl: \"error/permission-denied.html\"})\n\n $routeProvider.otherwise({redirectTo: \"/not-found\"})\n $locationProvider.html5Mode({enabled: true, requireBase: false})\n\n defaultHeaders = {\n \"Content-Type\": \"application/json\"\n \"Accept-Language\": window.taigaConfig.defaultLanguage || \"en\"\n \"X-Session-Id\": taiga.sessionId\n }\n\n $httpProvider.defaults.headers.delete = defaultHeaders\n $httpProvider.defaults.headers.patch = defaultHeaders\n $httpProvider.defaults.headers.post = defaultHeaders\n $httpProvider.defaults.headers.put = defaultHeaders\n $httpProvider.defaults.headers.get = {\n \"X-Session-Id\": taiga.sessionId\n }\n\n $httpProvider.useApplyAsync(true)\n\n $tgEventsProvider.setSessionId(taiga.sessionId)\n\n # Add next param when user try to access to a secction need auth permissions.\n authHttpIntercept = ($q, $location, $navUrls, $lightboxService) ->\n httpResponseError = (response) ->\n if response.status == 0 || response.status == -1\n $lightboxService.closeAll()\n $location.path($navUrls.resolve(\"error\"))\n $location.replace()\n else if response.status == 401 and $location.url().indexOf('/login') == -1\n nextUrl = encodeURIComponent($location.url())\n $location.url($navUrls.resolve(\"login\")).search(\"next=#{nextUrl}\")\n\n return $q.reject(response)\n\n return {\n responseError: httpResponseError\n }\n\n $provide.factory(\"authHttpIntercept\", [\"$q\", \"$location\", \"$tgNavUrls\", \"lightboxService\",\n authHttpIntercept])\n\n $httpProvider.interceptors.push(\"authHttpIntercept\")\n\n\n loaderIntercept = ($q, loaderService) ->\n return {\n request: (config) ->\n loaderService.logRequest()\n\n return config\n\n requestError: (rejection) ->\n loaderService.logResponse()\n\n return $q.reject(rejection)\n\n responseError: (rejection) ->\n loaderService.logResponse()\n\n return $q.reject(rejection)\n\n response: (response) ->\n loaderService.logResponse()\n\n return response\n }\n\n\n $provide.factory(\"loaderIntercept\", [\"$q\", \"tgLoader\", loaderIntercept])\n\n $httpProvider.interceptors.push(\"loaderIntercept\")\n\n # If there is an error in the version throw a notify error.\n # IMPROVEiMENT: Move this version error handler to USs, issues and tasks repository\n versionCheckHttpIntercept = ($q) ->\n httpResponseError = (response) ->\n if response.status == 400 && response.data.version\n # HACK: to prevent circular dependencies with [$tgConfirm, $translate]\n $injector = angular.element(\"body\").injector()\n $injector.invoke([\"$tgConfirm\", \"$translate\", ($confirm, $translate) =>\n versionErrorMsg = $translate.instant(\"ERROR.VERSION_ERROR\")\n $confirm.notify(\"error\", versionErrorMsg, null, 10000)\n ])\n\n return $q.reject(response)\n\n return {responseError: httpResponseError}\n\n $provide.factory(\"versionCheckHttpIntercept\", [\"$q\", versionCheckHttpIntercept])\n\n $httpProvider.interceptors.push(\"versionCheckHttpIntercept\")\n\n window.checksley.updateValidators({\n linewidth: (val, width) ->\n lines = taiga.nl2br(val).split(\"
\")\n\n valid = _.every lines, (line) ->\n line.length < width\n\n return valid\n })\n\n $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false)\n\n if localStorage.userInfo\n userInfo = JSON.parse(localStorage.userInfo)\n\n # i18n\n preferedLangCode = userInfo?.lang || window.taigaConfig.defaultLanguage || \"en\"\n\n $translateProvider\n .useStaticFilesLoader({\n prefix: \"/locales/locale-\",\n suffix: \".json\"\n })\n .addInterpolation('$translateMessageFormatInterpolation')\n .preferredLanguage(preferedLangCode)\n\n $translateProvider.fallbackLanguage(preferedLangCode)\n\n # decoratos\n decorators = _.where(@.taigaContribPlugins, {\"type\": \"decorator\"})\n\n _.each decorators, (decorator) ->\n $provide.decorator decorator.provider, decorator.decorator\n\n # decoratos\n decorators = _.where(@.taigaContribPlugins, {\"type\": \"decorator\"})\n\n _.each decorators, (decorator) ->\n $provide.decorator decorator.provider, decorator.decorator\n\ni18nInit = (lang, $translate) ->\n # i18n - moment.js\n moment.locale(lang)\n\n # i18n - checksley.js\n messages = {\n defaultMessage: $translate.instant(\"COMMON.FORM_ERRORS.DEFAULT_MESSAGE\")\n type: {\n email: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_EMAIL\")\n url: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URL\")\n urlstrict: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URLSTRICT\")\n number: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_NUMBER\")\n digits: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DIGITS\")\n dateIso: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DATEISO\")\n alphanum: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_ALPHANUM\")\n phone: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_PHONE\")\n }\n notnull: $translate.instant(\"COMMON.FORM_ERRORS.NOTNULL\")\n notblank: $translate.instant(\"COMMON.FORM_ERRORS.NOT_BLANK\")\n required: $translate.instant(\"COMMON.FORM_ERRORS.REQUIRED\")\n regexp: $translate.instant(\"COMMON.FORM_ERRORS.REGEXP\")\n min: $translate.instant(\"COMMON.FORM_ERRORS.MIN\")\n max: $translate.instant(\"COMMON.FORM_ERRORS.MAX\")\n range: $translate.instant(\"COMMON.FORM_ERRORS.RANGE\")\n minlength: $translate.instant(\"COMMON.FORM_ERRORS.MIN_LENGTH\")\n maxlength: $translate.instant(\"COMMON.FORM_ERRORS.MAX_LENGTH\")\n rangelength: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_LENGTH\")\n mincheck: $translate.instant(\"COMMON.FORM_ERRORS.MIN_CHECK\")\n maxcheck: $translate.instant(\"COMMON.FORM_ERRORS.MAX_CHECK\")\n rangecheck: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_CHECK\")\n equalto: $translate.instant(\"COMMON.FORM_ERRORS.EQUAL_TO\")\n }\n checksley.updateMessages('default', messages)\n\n\ninit = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $navUrls, appMetaService, projectService, loaderService, navigationBarService) ->\n $log.debug(\"Initialize application\")\n\n # Taiga Plugins\n $rootscope.contribPlugins = @.taigaContribPlugins\n $rootscope.adminPlugins = _.where(@.taigaContribPlugins, {\"type\": \"admin\"})\n\n $rootscope.$on \"$translateChangeEnd\", (e, ctx) ->\n lang = ctx.language\n i18nInit(lang, $translate)\n\n # bluebird\n Promise.setScheduler (cb) ->\n $rootscope.$evalAsync(cb)\n\n # Load user\n if $auth.isAuthenticated()\n $events.setupConnection()\n user = $auth.getUser()\n\n # Analytics\n $analytics.initialize()\n\n # On the first page load the loader is painted in `$routeChangeSuccess`\n # because we need to hide the tg-navigation-bar.\n # In the other cases the loader is in `$routeChangeSuccess`\n # because `location.noreload` prevent to execute this event.\n un = $rootscope.$on '$routeChangeStart', (event, next) ->\n if next.loader\n loaderService.start(true)\n\n un()\n\n $rootscope.$on '$routeChangeSuccess', (event, next) ->\n if next.loader\n loaderService.start(true)\n\n if next.access && next.access.requiresLogin\n if !$auth.isAuthenticated()\n $location.path($navUrls.resolve(\"login\"))\n\n projectService.setSection(next.section)\n\n if next.params.pslug\n projectService.setProjectBySlug(next.params.pslug)\n else\n projectService.cleanProject()\n\n if next.title or next.description\n title = $translate.instant(next.title or \"\")\n description = $translate.instant(next.description or \"\")\n appMetaService.setAll(title, description)\n\n if next.mobileViewport\n appMetaService.addMobileViewport()\n else\n appMetaService.removeMobileViewport()\n\n if next.disableHeader\n navigationBarService.disableHeader()\n else\n navigationBarService.enableHeader()\n\npluginsWithModule = _.filter(@.taigaContribPlugins, (plugin) -> plugin.module)\n\npluginsWithModule = _.filter(@.taigaContribPlugins, (plugin) -> plugin.module)\n\nmodules = [\n # Main Global Modules\n \"taigaBase\",\n \"taigaCommon\",\n \"taigaResources\",\n \"taigaResources2\",\n \"taigaAuth\",\n \"taigaEvents\",\n\n # Specific Modules\n \"taigaHome\",\n \"taigaNavigationBar\",\n \"taigaProjects\",\n \"taigaRelatedTasks\",\n \"taigaBacklog\",\n \"taigaTaskboard\",\n \"taigaKanban\",\n \"taigaIssues\",\n \"taigaUserStories\",\n \"taigaTasks\",\n \"taigaTeam\",\n \"taigaWiki\",\n \"taigaSearch\",\n \"taigaAdmin\",\n \"taigaProject\",\n \"taigaUserSettings\",\n \"taigaFeedback\",\n \"taigaPlugins\",\n \"taigaIntegrations\",\n \"taigaComponents\",\n # new modules\n \"taigaProfile\",\n \"taigaHome\",\n \"taigaUserTimeline\",\n \"taigaExternalApps\",\n\n # template cache\n \"templates\",\n\n # Vendor modules\n \"ngRoute\",\n \"ngAnimate\",\n \"ngAria\",\n \"pascalprecht.translate\",\n \"infinite-scroll\",\n \"tgRepeat\"\n].concat(_.map(pluginsWithModule, (plugin) -> plugin.module))\n\n# Main module definition\nmodule = angular.module(\"taiga\", modules)\n\nmodule.config([\n \"$routeProvider\",\n \"$locationProvider\",\n \"$httpProvider\",\n \"$provide\",\n \"$tgEventsProvider\",\n \"$compileProvider\",\n \"$translateProvider\",\n \"$animateProvider\",\n configure\n])\n\nmodule.run([\n \"$log\",\n \"$rootScope\",\n \"$tgAuth\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"tgProjectService\",\n \"tgLoader\",\n \"tgNavigationBarService\",\n \"$route\",\n init\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: classes.coffee\n###\n\nclass TaigaBase\nclass TaigaService extends TaigaBase\nclass TaigaController extends TaigaBase\n onInitialDataError: (xhr) =>\n if xhr\n if xhr.status == 404\n @location.path(@navUrls.resolve(\"not-found\"))\n @location.replace()\n else if xhr.status == 403\n @location.path(@navUrls.resolve(\"permission-denied\"))\n @location.replace()\n\n return @q.reject(xhr)\n\n@.taiga.Base = TaigaBase\n@.taiga.Service = TaigaService\n@.taiga.Controller = TaigaController\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: utils.coffee\n###\n\nnl2br = (str) =>\n breakTag = '
'\n return (str + '').replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1' + breakTag + '$2')\n\nbindMethods = (object) =>\n dependencies = _.keys(object)\n\n methods = []\n\n _.forIn object, (value, key) =>\n if key not in dependencies\n methods.push(key)\n\n _.bindAll(object, methods)\n\nbindOnce = (scope, attr, continuation) =>\n val = scope.$eval(attr)\n if val != undefined\n return continuation(val)\n\n delBind = null\n delBind = scope.$watch attr, (val) ->\n return if val is undefined\n continuation(val)\n delBind() if delBind\n\n\nmixOf = (base, mixins...) ->\n class Mixed extends base\n\n for mixin in mixins by -1 #earlier mixins override later ones\n for name, method of mixin::\n Mixed::[name] = method\n Mixed\n\n\ntrim = (data, char) ->\n return _.str.trim(data, char)\n\n\nslugify = (data) ->\n return _.str.slugify(data)\n\n\nunslugify = (data) ->\n if data\n return _.str.capitalize(data.replace(/-/g, ' '))\n return data\n\n\ntoggleText = (element, texts) ->\n nextTextPosition = element.data('nextTextPosition')\n nextTextPosition = 0 if not nextTextPosition? or nextTextPosition >= texts.length\n text = texts[nextTextPosition]\n element.data('nextTextPosition', nextTextPosition + 1)\n element.text(text)\n\n\ngroupBy = (coll, pred) ->\n result = {}\n for item in coll\n result[pred(item)] = item\n\n return result\n\n\ntimeout = (wait, continuation) ->\n return window.setTimeout(continuation, wait)\n\n\ncancelTimeout = (timeoutVar) ->\n window.clearTimeout(timeoutVar)\n\n\nscopeDefer = (scope, func) ->\n _.defer =>\n scope.$apply(func)\n\n\ntoString = (value) ->\n if _.isNumber(value)\n return value + \"\"\n else if _.isString(value)\n return value\n else if _.isPlainObject(value)\n return JSON.stringify(value)\n else if _.isUndefined(value)\n return \"\"\n return value.toString()\n\n\njoinStr = (str, coll) ->\n return _.str.join(str, coll)\n\n\ndebounce = (wait, func) ->\n return _.debounce(func, wait, {leading: true, trailing: false})\n\n\ndebounceLeading = (wait, func) ->\n return _.debounce(func, wait, {leading: false, trailing: true})\n\n\nstartswith = (str1, str2) ->\n return _.str.startsWith(str1, str2)\n\n\ntruncate = (str, maxLength, suffix=\"...\") ->\n return str if (typeof str != \"string\") and not (str instanceof String)\n\n out = str.slice(0)\n\n if out.length > maxLength\n out = out.substring(0, maxLength + 1)\n out = out.substring(0, Math.min(out.length, out.lastIndexOf(\" \")))\n out = out + suffix\n\n return out\n\n\nsizeFormat = (input, precision=1) ->\n if isNaN(parseFloat(input)) or not isFinite(input)\n return \"-\"\n\n if input == 0\n return \"0 bytes\"\n\n units = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"]\n number = Math.floor(Math.log(input) / Math.log(1024))\n if number > 5\n number = 5\n size = (input / Math.pow(1024, number)).toFixed(precision)\n return \"#{size} #{units[number]}\"\n\nstripTags = (str, exception) ->\n if exception\n pattern = new RegExp('<(?!' + exception + '\\s*\\/?)[^>]+>', 'gi')\n return String(str).replace(pattern, '')\n else\n return String(str).replace(/<\\/?[^>]+>/g, '')\n\nreplaceTags = (str, tags, replace) ->\n # open tag\n pattern = new RegExp('<(' + tags + ')>', 'gi')\n str = str.replace(pattern, '<' + replace + '>')\n\n # close tag\n pattern = new RegExp('<\\/(' + tags + ')>', 'gi')\n str = str.replace(pattern, '')\n\n return str\n\ndefineImmutableProperty = (obj, name, fn) =>\n Object.defineProperty obj, name, {\n get: () =>\n if !_.isFunction(fn)\n throw \"defineImmutableProperty third param must be a function\"\n\n fn_result = fn()\n if fn_result && _.isObject(fn_result)\n if fn_result.size == undefined\n throw \"defineImmutableProperty must return immutable data\"\n\n return fn_result\n }\n\n_.mixin\n removeKeys: (obj, keys) ->\n _.chain([keys]).flatten().reduce(\n (obj, key) ->\n delete obj[key]; obj\n , obj).value()\n\ntaiga = @.taiga\ntaiga.nl2br = nl2br\ntaiga.bindMethods = bindMethods\ntaiga.bindOnce = bindOnce\ntaiga.mixOf = mixOf\ntaiga.trim = trim\ntaiga.slugify = slugify\ntaiga.unslugify = unslugify\ntaiga.toggleText = toggleText\ntaiga.groupBy = groupBy\ntaiga.timeout = timeout\ntaiga.cancelTimeout = cancelTimeout\ntaiga.scopeDefer = scopeDefer\ntaiga.toString = toString\ntaiga.joinStr = joinStr\ntaiga.truncate = truncate\ntaiga.debounce = debounce\ntaiga.debounceLeading = debounceLeading\ntaiga.startswith = startswith\ntaiga.sizeFormat = sizeFormat\ntaiga.stripTags = stripTags\ntaiga.replaceTags = replaceTags\ntaiga.defineImmutableProperty = defineImmutableProperty\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/controllerMixins.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\njoinStr = @.taiga.joinStr\ntrim = @.taiga.trim\ntoString = @.taiga.toString\n\n\n#############################################################################\n## Page Mixin\n#############################################################################\n\nclass PageMixin\n fillUsersAndRoles: (users, roles) ->\n activeUsers = _.filter(users, (user) => user.is_active)\n @scope.activeUsers = _.sortBy(activeUsers, \"full_name_display\")\n @scope.activeUsersById = groupBy(@scope.activeUsers, (e) -> e.id)\n\n @scope.users = _.sortBy(users, \"full_name_display\")\n @scope.usersById = groupBy(@scope.users, (e) -> e.id)\n\n @scope.roles = _.sortBy(roles, \"order\")\n computableRoles = _(@scope.project.members).map(\"role\").uniq().value()\n @scope.computableRoles = _(roles).filter(\"computable\")\n .filter((x) -> _.contains(computableRoles, x.id))\n .value()\n loadUsersAndRoles: ->\n promise = @q.all([\n @rs.projects.usersList(@scope.projectId),\n @rs.projects.rolesList(@scope.projectId)\n ])\n\n return promise.then (results) =>\n [users, roles] = results\n @.fillUsersAndRoles(users, roles)\n return results\n\ntaiga.PageMixin = PageMixin\n\n\n#############################################################################\n## Filters Mixin\n#############################################################################\n# This mixin requires @location ($tgLocation), and @scope\n\nclass FiltersMixin\n selectFilter: (name, value, load=false) ->\n params = @location.search()\n if params[name] != undefined and name != \"page\"\n existing = _.map(taiga.toString(params[name]).split(\",\"), (x) -> trim(x))\n existing.push(taiga.toString(value))\n existing = _.compact(existing)\n value = joinStr(\",\", _.uniq(existing))\n\n if !@location.isInCurrentRouteParams(name, value)\n location = if load then @location else @location.noreload(@scope)\n location.search(name, value)\n\n replaceFilter: (name, value, load=false) ->\n if !@location.isInCurrentRouteParams(name, value)\n location = if load then @location else @location.noreload(@scope)\n location.search(name, value)\n\n replaceAllFilters: (filters, load=false) ->\n location = if load then @location else @location.noreload(@scope)\n location.search(filters)\n\n unselectFilter: (name, value, load=false) ->\n params = @location.search()\n\n if params[name] is undefined\n return\n\n if value is undefined or value is null\n delete params[name]\n\n parsedValues = _.map(taiga.toString(params[name]).split(\",\"), (x) -> trim(x))\n newValues = _.reject(parsedValues, (x) -> x == taiga.toString(value))\n newValues = _.compact(newValues)\n\n if _.isEmpty(newValues)\n value = null\n else\n value = joinStr(\",\", _.uniq(newValues))\n\n location = if load then @location else @location.noreload(@scope)\n location.search(name, value)\n\ntaiga.FiltersMixin = FiltersMixin\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin.coffee\n###\n\nmodule = angular.module(\"taigaAdmin\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/auth.coffee\n###\n\ntaiga = @.taiga\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaAuth\", [\"taigaResources\"])\n\n#############################################################################\n## Authentication Service\n#############################################################################\n\nclass AuthService extends taiga.Service\n @.$inject = [\"$rootScope\",\n \"$tgStorage\",\n \"$tgModel\",\n \"$tgResources\",\n \"$tgHttp\",\n \"$tgUrls\",\n \"$tgConfig\",\n \"$translate\",\n \"tgCurrentUserService\",\n \"tgThemeService\"]\n\n constructor: (@rootscope, @storage, @model, @rs, @http, @urls, @config, @translate, @currentUserService,\n @themeService) ->\n super()\n\n @._currentTheme = @config.get(\"defaultTheme\") || \"taiga\" # load on index.jade\n\n userModel = @.getUser()\n @.setUserdata(userModel)\n\n setUserdata: (userModel) ->\n if userModel\n @.userData = Immutable.fromJS(userModel.getAttrs())\n @currentUserService.setUser(@.userData)\n else\n @.userData = null\n\n _getUserTheme: ->\n return @rootscope.user?.theme || @config.get(\"defaultTheme\") || \"taiga\"\n\n _setTheme: ->\n newTheme = @._getUserTheme()\n\n if @._currentTheme != newTheme\n @._currentTheme = newTheme\n @themeService.use(@._currentTheme)\n\n _setLocales: ->\n lang = @rootscope.user?.lang || @config.get(\"defaultLanguage\") || \"en\"\n @translate.preferredLanguage(lang) # Needed for calls to the api in the correct language\n @translate.use(lang) # Needed for change the interface in runtime\n\n getUser: ->\n if @rootscope.user\n return @rootscope.user\n\n userData = @storage.get(\"userInfo\")\n if userData\n user = @model.make_model(\"users\", userData)\n @rootscope.user = user\n @._setLocales()\n\n @._setTheme()\n\n return user\n\n return null\n\n setUser: (user) ->\n @rootscope.auth = user\n @storage.set(\"userInfo\", user.getAttrs())\n @rootscope.user = user\n\n @.setUserdata(user)\n\n @._setLocales()\n @._setTheme()\n\n clear: ->\n @rootscope.auth = null\n @rootscope.user = null\n @storage.remove(\"userInfo\")\n\n setToken: (token) ->\n @storage.set(\"token\", token)\n\n getToken: ->\n return @storage.get(\"token\")\n\n removeToken: ->\n @storage.remove(\"token\")\n\n isAuthenticated: ->\n if @.getUser() != null\n return true\n return false\n\n ## Http interface\n\n login: (data, type) ->\n url = @urls.resolve(\"auth\")\n\n data = _.clone(data, false)\n data.type = if type then type else \"normal\"\n\n @.removeToken()\n\n return @http.post(url, data).then (data, status) =>\n user = @model.make_model(\"users\", data.data)\n @.setToken(user.auth_token)\n @.setUser(user)\n return user\n\n logout: ->\n @.removeToken()\n @.clear()\n @currentUserService.removeUser()\n\n @._setTheme()\n @._setLocales()\n\n\n register: (data, type, existing) ->\n url = @urls.resolve(\"auth-register\")\n\n data = _.clone(data, false)\n data.type = if type then type else \"public\"\n if type == \"private\"\n data.existing = if existing then existing else false\n\n @.removeToken()\n\n return @http.post(url, data).then (response) =>\n user = @model.make_model(\"users\", response.data)\n @.setToken(user.auth_token)\n @.setUser(user)\n return user\n\n getInvitation: (token) ->\n return @rs.invitations.get(token)\n\n acceptInvitiationWithNewUser: (data) ->\n return @.register(data, \"private\", false)\n\n acceptInvitiationWithExistingUser: (data) ->\n return @.register(data, \"private\", true)\n\n forgotPassword: (data) ->\n url = @urls.resolve(\"users-password-recovery\")\n data = _.clone(data, false)\n @.removeToken()\n return @http.post(url, data)\n\n changePasswordFromRecovery: (data) ->\n url = @urls.resolve(\"users-change-password-from-recovery\")\n data = _.clone(data, false)\n @.removeToken()\n return @http.post(url, data)\n\n changeEmail: (data) ->\n url = @urls.resolve(\"users-change-email\")\n data = _.clone(data, false)\n return @http.post(url, data)\n\n cancelAccount: (data) ->\n url = @urls.resolve(\"users-cancel-account\")\n data = _.clone(data, false)\n return @http.post(url, data)\n\nmodule.service(\"$tgAuth\", AuthService)\n\n\n#############################################################################\n## Login Directive\n#############################################################################\n\n# Directive that manages the visualization of public register\n# message/link on login page.\n\nPublicRegisterMessageDirective = ($config, $navUrls, templates) ->\n template = templates.get(\"auth/login-text.html\", true)\n\n templateFn = ->\n publicRegisterEnabled = $config.get(\"publicRegisterEnabled\")\n if not publicRegisterEnabled\n return \"\"\n return template({url:$navUrls.resolve(\"register\")})\n\n return {\n restrict: \"AE\"\n scope: {}\n template: templateFn\n }\n\nmodule.directive(\"tgPublicRegisterMessage\", [\"$tgConfig\", \"$tgNavUrls\", \"$tgTemplate\",\n PublicRegisterMessageDirective])\n\n\nLoginDirective = ($auth, $confirm, $location, $config, $routeParams, $navUrls, $events, $translate) ->\n link = ($scope, $el, $attrs) ->\n onSuccess = (response) ->\n if $routeParams['next'] and $routeParams['next'] != $navUrls.resolve(\"login\")\n nextUrl = decodeURIComponent($routeParams['next'])\n else\n nextUrl = $navUrls.resolve(\"home\")\n\n $events.setupConnection()\n $location.url(nextUrl)\n\n onError = (response) ->\n $confirm.notify(\"light-error\", $translate.instant(\"LOGIN_FORM.ERROR_AUTH_INCORRECT\"))\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = new checksley.Form($el.find(\"form.login-form\"))\n if not form.validate()\n return\n\n data = {\n \"username\": $el.find(\"form.login-form input[name=username]\").val(),\n \"password\": $el.find(\"form.login-form input[name=password]\").val()\n }\n\n loginFormType = $config.get(\"loginFormType\", \"normal\")\n\n promise = $auth.login(data, loginFormType)\n return promise.then(onSuccess, onError)\n\n $el.on \"submit\", \"form\", submit\n\n window.prerenderReady = true\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgLogin\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\",\n \"$tgNavUrls\", \"$tgEvents\", \"$translate\", LoginDirective])\n\n\n#############################################################################\n## Register Directive\n#############################################################################\n\nRegisterDirective = ($auth, $confirm, $location, $navUrls, $config, $analytics, $translate) ->\n link = ($scope, $el, $attrs) ->\n if not $config.get(\"publicRegisterEnabled\")\n $location.path($navUrls.resolve(\"not-found\"))\n $location.replace()\n\n $scope.data = {}\n form = $el.find(\"form\").checksley({onlyOneErrorElement: true})\n\n onSuccessSubmit = (response) ->\n $analytics.trackEvent(\"auth\", \"register\", \"user registration\", 1)\n\n $confirm.notify(\"success\", $translate.instant(\"LOGIN_FORM.SUCCESS\"))\n\n $location.path($navUrls.resolve(\"home\"))\n\n onErrorSubmit = (response) ->\n if response.data._error_message\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n $confirm.notify(\"light-error\", text)\n\n form.setErrors(response.data)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.register($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n window.prerenderReady = true\n\n return {link:link}\n\nmodule.directive(\"tgRegister\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\",\n \"$tgAnalytics\", \"$translate\", RegisterDirective])\n\n\n#############################################################################\n## Forgot Password Directive\n#############################################################################\n\nForgotPasswordDirective = ($auth, $confirm, $location, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"FORGOT_PASSWORD_FORM.SUCCESS\")\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"FORGOT_PASSWORD_FORM.ERROR\")\n\n $confirm.notify(\"light-error\", text)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.forgotPassword($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n window.prerenderReady = true\n\n return {link:link}\n\nmodule.directive(\"tgForgotPassword\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$translate\",\n ForgotPasswordDirective])\n\n\n#############################################################################\n## Change Password from Recovery Directive\n#############################################################################\n\nChangePasswordFromRecoveryDirective = ($auth, $confirm, $location, $params, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n\n if $params.token?\n $scope.tokenInParams = true\n $scope.data.token = $params.token\n else\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\")\n $confirm.notify(\"light-error\",text)\n\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.SUCCESS\")\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\")\n $confirm.notify(\"light-error\", text)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.changePasswordFromRecovery($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgChangePasswordFromRecovery\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\",\n \"$tgNavUrls\", \"$translate\",\n ChangePasswordFromRecoveryDirective])\n\n\n#############################################################################\n## Invitation\n#############################################################################\n\nInvitationDirective = ($auth, $confirm, $location, $params, $navUrls, $analytics, $translate) ->\n link = ($scope, $el, $attrs) ->\n token = $params.token\n\n promise = $auth.getInvitation(token)\n promise.then (invitation) ->\n $scope.invitation = invitation\n\n promise.then null, (response) ->\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"INVITATION_LOGIN_FORM.NOT_FOUND\")\n $confirm.notify(\"light-error\", text)\n\n # Login form\n $scope.dataLogin = {token: token}\n loginForm = $el.find(\"form.login-form\").checksley({onlyOneErrorElement: true})\n\n onSuccessSubmitLogin = (response) ->\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with existing user\", 1)\n $location.path($navUrls.resolve(\"project\", {project: $scope.invitation.project_slug}))\n text = $translate.instant(\"INVITATION_LOGIN_FORM.SUCCESS\", {\n \"project_name\": $scope.invitation.project_name\n })\n\n $confirm.notify(\"success\", text)\n\n onErrorSubmitLogin = (response) ->\n text = $translate.instant(\"INVITATION_LOGIN_FORM.ERROR\")\n\n $confirm.notify(\"light-error\", text)\n\n submitLogin = debounce 2000, (event) =>\n event.preventDefault()\n\n if not loginForm.validate()\n return\n\n promise = $auth.acceptInvitiationWithExistingUser($scope.dataLogin)\n promise.then(onSuccessSubmitLogin, onErrorSubmitLogin)\n\n $el.on \"submit\", \"form.login-form\", submitLogin\n $el.on \"click\", \".button-login\", submitLogin\n\n # Register form\n $scope.dataRegister = {token: token}\n registerForm = $el.find(\"form.register-form\").checksley({onlyOneErrorElement: true})\n\n onSuccessSubmitRegister = (response) ->\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with new user\", 1)\n $location.path($navUrls.resolve(\"project\", {project: $scope.invitation.project_slug}))\n $confirm.notify(\"success\", \"You've successfully joined this project\",\n \"Welcome to #{_.escape($scope.invitation.project_name)}\")\n\n onErrorSubmitRegister = (response) ->\n if response.data._error_message\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n $confirm.notify(\"light-error\", text)\n\n registerForm.setErrors(response.data)\n\n submitRegister = debounce 2000, (event) =>\n event.preventDefault()\n\n if not registerForm.validate()\n return\n\n promise = $auth.acceptInvitiationWithNewUser($scope.dataRegister)\n promise.then(onSuccessSubmitRegister, onErrorSubmitRegister)\n\n $el.on \"submit\", \"form.register-form\", submitRegister\n $el.on \"click\", \".button-register\", submitRegister\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgInvitation\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\",\n \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", InvitationDirective])\n\n\n#############################################################################\n## Change Email\n#############################################################################\n\nChangeEmailDirective = ($repo, $model, $auth, $confirm, $location, $params, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n $scope.data.email_token = $params.email_token\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n if $auth.isAuthenticated()\n $repo.queryOne(\"users\", $auth.getUser().id).then (data) =>\n $auth.setUser(data)\n $location.path($navUrls.resolve(\"home\"))\n else\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"CHANGE_EMAIL_FORM.SUCCESS\")\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n\n $confirm.notify(\"light-error\", text)\n\n submit = ->\n if not form.validate()\n return\n\n promise = $auth.changeEmail($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", (event) ->\n event.preventDefault()\n submit()\n\n $el.on \"click\", \"a.button-change-email\", (event) ->\n event.preventDefault()\n submit()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgChangeEmail\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\",\n \"$routeParams\", \"$tgNavUrls\", \"$translate\", ChangeEmailDirective])\n\n\n#############################################################################\n## Cancel account\n#############################################################################\n\nCancelAccountDirective = ($repo, $model, $auth, $confirm, $location, $params, $navUrls) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n $scope.data.cancel_token = $params.cancel_token\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n $auth.logout()\n $location.path($navUrls.resolve(\"home\"))\n\n text = $translate.instant(\"CANCEL_ACCOUNT.SUCCESS\")\n\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n\n $confirm.notify(\"error\", text)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.cancelAccount($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgCancelAccount\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\",\n \"$routeParams\",\"$tgNavUrls\", CancelAccountDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog.coffee\n###\n\nmodule = angular.module(\"taigaBacklog\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base.coffee\n###\n\ntaiga = @.taiga\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaBase\", [])\n\n#############################################################################\n## Main Directive\n#############################################################################\n\nTaigaMainDirective = ($rootscope, $window) ->\n link = ($scope, $el, $attrs) ->\n $window.onresize = () ->\n $rootscope.$broadcast(\"resize\")\n\n return {link:link}\n\nmodule.directive(\"tgMain\", [\"$rootScope\", \"$window\", TaigaMainDirective])\n\n#############################################################################\n## Navigation\n#############################################################################\n\nurls = {\n \"home\": \"/\"\n \"projects\": \"/projects\"\n \"error\": \"/error\"\n \"not-found\": \"/not-found\"\n \"permission-denied\": \"/permission-denied\"\n\n \"login\": \"/login\"\n \"forgot-password\": \"/forgot-password\"\n \"change-password\": \"/change-password/:token\"\n \"change-email\": \"/change-email/:token\"\n \"cancel-account\": \"/cancel-account/:token\"\n \"register\": \"/register\"\n \"invitation\": \"/invitation/:token\"\n \"create-project\": \"/create-project\"\n\n \"profile\": \"/profile\"\n \"user-profile\": \"/profile/:username\"\n\n \"project\": \"/project/:project\"\n \"project-backlog\": \"/project/:project/backlog\"\n \"project-taskboard\": \"/project/:project/taskboard/:sprint\"\n \"project-kanban\": \"/project/:project/kanban\"\n \"project-issues\": \"/project/:project/issues\"\n \"project-search\": \"/project/:project/search\"\n\n \"project-userstories-detail\": \"/project/:project/us/:ref\"\n \"project-tasks-detail\": \"/project/:project/task/:ref\"\n \"project-issues-detail\": \"/project/:project/issue/:ref\"\n\n \"project-wiki\": \"/project/:project/wiki\"\n \"project-wiki-page\": \"/project/:project/wiki/:slug\"\n\n # Team\n \"project-team\": \"/project/:project/team\"\n\n # Admin\n \"project-admin-home\": \"/project/:project/admin/project-profile/details\"\n \"project-admin-project-profile-details\": \"/project/:project/admin/project-profile/details\"\n \"project-admin-project-profile-default-values\": \"/project/:project/admin/project-profile/default-values\"\n \"project-admin-project-profile-modules\": \"/project/:project/admin/project-profile/modules\"\n \"project-admin-project-profile-export\": \"/project/:project/admin/project-profile/export\"\n \"project-admin-project-profile-reports\": \"/project/:project/admin/project-profile/reports\"\n\n \"project-admin-project-values-status\": \"/project/:project/admin/project-values/status\"\n \"project-admin-project-values-points\": \"/project/:project/admin/project-values/points\"\n \"project-admin-project-values-priorities\": \"/project/:project/admin/project-values/priorities\"\n \"project-admin-project-values-severities\": \"/project/:project/admin/project-values/severities\"\n \"project-admin-project-values-types\": \"/project/:project/admin/project-values/types\"\n \"project-admin-project-values-custom-fields\": \"/project/:project/admin/project-values/custom-fields\"\n\n \"project-admin-memberships\": \"/project/:project/admin/memberships\"\n \"project-admin-roles\": \"/project/:project/admin/roles\"\n \"project-admin-third-parties-webhooks\": \"/project/:project/admin/third-parties/webhooks\"\n \"project-admin-third-parties-github\": \"/project/:project/admin/third-parties/github\"\n \"project-admin-third-parties-gitlab\": \"/project/:project/admin/third-parties/gitlab\"\n \"project-admin-third-parties-bitbucket\": \"/project/:project/admin/third-parties/bitbucket\"\n \"project-admin-contrib\": \"/project/:project/admin/contrib/:plugin\"\n\n # User settings\n \"user-settings-user-profile\": \"/user-settings/user-profile\"\n \"user-settings-user-change-password\": \"/user-settings/user-change-password\"\n \"user-settings-user-avatar\": \"/user-settings/user-avatar\"\n \"user-settings-mail-notifications\": \"/user-settings/mail-notifications\"\n\n}\n\ninit = ($log, $navurls) ->\n $log.debug \"Initialize navigation urls\"\n $navurls.update(urls)\n\nmodule.run([\"$log\", \"$tgNavUrls\", init])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common.coffee\n###\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaCommon\", [])\n\n#############################################################################\n## Default datepicker config\n#############################################################################\nDataPickerConfig = ($translate) ->\n return {\n get: () ->\n return {\n i18n: {\n previousMonth: $translate.instant(\"COMMON.PICKERDATE.PREV_MONTH\"),\n nextMonth: $translate.instant(\"COMMON.PICKERDATE.NEXT_MONTH\"),\n months: [\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.JAN\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.FEB\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAR\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.APR\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAY\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUN\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUL\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.AUG\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.SEP\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.OCT\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.NOV\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.DEC\")\n ],\n weekdays: [\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SUN\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.MON\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.TUE\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.WED\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.THU\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.FRI\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SAT\")\n ],\n weekdaysShort: [\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT\")\n ]\n },\n isRTL: $translate.instant(\"COMMON.PICKERDATE.IS_RTL\") == \"true\",\n firstDay: parseInt($translate.instant(\"COMMON.PICKERDATE.FIRST_DAY_OF_WEEK\"), 10),\n format: $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n }\n }\n\nmodule.factory(\"tgDatePickerConfigService\", [\"$translate\", DataPickerConfig])\n\n#############################################################################\n## Get the selected text\n#############################################################################\nSelectedText = ($window, $document) ->\n get = () ->\n if $window.getSelection\n return $window.getSelection().toString()\n else if $document.selection\n return $document.selection.createRange().text\n return \"\"\n\n return {get: get}\n\nmodule.factory(\"$selectedText\", [\"$window\", \"$document\", SelectedText])\n\n#############################################################################\n## Permission directive, hide elements when necessary\n#############################################################################\n\nCheckPermissionDirective = ->\n render = ($el, project, permission) ->\n $el.removeClass('hidden') if project.my_permissions.indexOf(permission) > -1\n\n link = ($scope, $el, $attrs) ->\n $el.addClass('hidden')\n permission = $attrs.tgCheckPermission\n\n $scope.$watch \"project\", (project) ->\n render($el, project, permission) if project?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgCheckPermission\", CheckPermissionDirective)\n\n#############################################################################\n## Add class based on permissions\n#############################################################################\n\nClassPermissionDirective = ->\n name = \"tgClassPermission\"\n\n link = ($scope, $el, $attrs) ->\n checkPermissions = (project, className, permission) ->\n negation = permission[0] == \"!\"\n\n permission = permission.slice(1) if negation\n\n if negation && project.my_permissions.indexOf(permission) == -1\n $el.addClass(className)\n else if !negation && project.my_permissions.indexOf(permission) != -1\n $el.addClass(className)\n else\n $el.removeClass(className)\n\n tgClassPermissionWatchAction = (project) ->\n if project\n unbindWatcher()\n\n classes = $scope.$eval($attrs[name])\n\n for className, permission of classes\n checkPermissions(project, className, permission)\n\n\n unbindWatcher = $scope.$watch \"project\", tgClassPermissionWatchAction\n\n return {link:link}\n\nmodule.directive(\"tgClassPermission\", ClassPermissionDirective)\n\n#############################################################################\n## Animation frame service, apply css changes in the next render frame\n#############################################################################\nAnimationFrame = () ->\n animationFrame =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame\n\n performAnimation = (time) =>\n fn = tail.shift()\n fn()\n\n if (tail.length)\n animationFrame(performAnimation)\n\n tail = []\n\n add = () ->\n for fn in arguments\n tail.push(fn)\n\n if tail.length == 1\n animationFrame(performAnimation)\n\n return {add: add}\n\nmodule.factory(\"animationFrame\", AnimationFrame)\n\n#############################################################################\n## Open/close comment\n#############################################################################\n\nToggleCommentDirective = () ->\n link = ($scope, $el, $attrs) ->\n $el.find(\"textarea\").on \"focus\", () ->\n $el.addClass(\"active\")\n\n return {link:link}\n\nmodule.directive(\"tgToggleComment\", ToggleCommentDirective)\n\n\n#############################################################################\n## Get the appropiate section url for a project\n## according to his enabled modules and user permisions\n#############################################################################\n\nProjectUrl = ($navurls) ->\n get = (project) ->\n ctx = {project: project.slug}\n\n if project.is_backlog_activated and project.my_permissions.indexOf(\"view_us\") > -1\n return $navurls.resolve(\"project-backlog\", ctx)\n if project.is_kanban_activated and project.my_permissions.indexOf(\"view_us\") > -1\n return $navurls.resolve(\"project-kanban\", ctx)\n if project.is_wiki_activated and project.my_permissions.indexOf(\"view_wiki_pages\") > -1\n return $navurls.resolve(\"project-wiki\", ctx)\n if project.is_issues_activated and project.my_permissions.indexOf(\"view_issues\") > -1\n return $navurls.resolve(\"project-issues\", ctx)\n\n return $navurls.resolve(\"project\", ctx)\n\n return {get: get}\n\nmodule.factory(\"$projectUrl\", [\"$tgNavUrls\", ProjectUrl])\n\n\n#############################################################################\n## Limite line size in a text area\n#############################################################################\n\nLimitLineLengthDirective = () ->\n link = ($scope, $el, $attrs) ->\n maxColsPerLine = parseInt($el.attr(\"cols\"))\n $el.on \"keyup\", (event) ->\n code = event.keyCode\n lines = $el.val().split(\"\\n\")\n\n _.each lines, (line, index) ->\n lines[index] = line.substring(0, maxColsPerLine - 2)\n\n $el.val(lines.join(\"\\n\"))\n\n return {link:link}\n\nmodule.directive(\"tgLimitLineLength\", LimitLineLengthDirective)\n\n#############################################################################\n## Queue Q promises\n#############################################################################\n\nQqueue = ($q) ->\n deferred = $q.defer()\n deferred.resolve()\n\n lastPromise = deferred.promise\n\n qqueue = {\n bindAdd: (fn) =>\n return (args...) =>\n lastPromise = lastPromise.then () => fn.apply(@, args)\n\n return qqueue\n add: (fn) =>\n if !lastPromise\n lastPromise = fn()\n else\n lastPromise = lastPromise.then(fn)\n\n return qqueue\n }\n\n return qqueue\n\nmodule.factory(\"$tgQqueue\", [\"$q\", Qqueue])\n\n#############################################################################\n## Templates\n#############################################################################\n\nTemplate = ($templateCache) ->\n return {\n get: (name, lodash = false) =>\n tmp = $templateCache.get(name)\n\n if lodash\n tmp = _.template(tmp)\n\n return tmp\n }\n\nmodule.factory(\"$tgTemplate\", [\"$templateCache\", Template])\n\n#############################################################################\n## Permission directive, hide elements when necessary\n#############################################################################\n\nCapslock = ($translate) ->\n link = ($scope, $el, $attrs) ->\n open = false\n\n warningIcon = $('
')\n .addClass('icon')\n .addClass('icon-capslock')\n .attr('title', $translate.instant('COMMON.CAPSLOCK_WARNING'))\n\n hideIcon = () ->\n warningIcon.fadeOut () ->\n open = false\n\n $(this).remove()\n\n showIcon = (e) ->\n return if open\n element = e.currentTarget\n $(element).parent().append(warningIcon)\n $('.icon-capslock').fadeIn()\n\n open = true\n\n $el.on 'blur', (e) ->\n hideIcon()\n\n $el.on 'keyup.capslock, focus', (e) ->\n if $el.val() == $el.val().toLowerCase()\n hideIcon(e)\n else\n showIcon(e)\n\n $scope.$on \"$destroy\", ->\n $el.off('.capslock')\n\n return {link:link}\n\nmodule.directive(\"tgCapslock\", [\"$translate\", Capslock])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/events.coffee\n###\n\ntaiga = @.taiga\nstartswith = @.taiga.startswith\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaEvents\", [])\n\n\nclass EventsService\n constructor: (@win, @log, @config, @auth) ->\n bindMethods(@)\n\n initialize: (sessionId) ->\n @.sessionId = sessionId\n @.subscriptions = {}\n @.connected = false\n @.error = false\n @.pendingMessages = []\n\n if @win.WebSocket is undefined\n @log.info \"WebSockets not supported on your browser\"\n\n setupConnection: ->\n @.stopExistingConnection()\n\n url = @config.get(\"eventsUrl\")\n\n # This allows disable events in case\n # url is not found on the configuration.\n return if not url\n\n # This allows relative urls in configuration.\n if not startswith(url, \"ws:\") and not startswith(url, \"wss:\")\n loc = @win.location\n scheme = if loc.protocol == \"https:\" then \"wss:\" else \"ws:\"\n path = _.str.ltrim(url, \"/\")\n url = \"#{scheme}//#{loc.host}/#{path}\"\n\n @.ws = new @win.WebSocket(url)\n @.ws.addEventListener(\"open\", @.onOpen)\n @.ws.addEventListener(\"message\", @.onMessage)\n @.ws.addEventListener(\"error\", @.onError)\n @.ws.addEventListener(\"close\", @.onClose)\n\n stopExistingConnection: ->\n if @.ws is undefined\n return\n\n @.ws.removeEventListener(\"open\", @.onOpen)\n @.ws.removeEventListener(\"close\", @.onClose)\n @.ws.removeEventListener(\"error\", @.onError)\n @.ws.removeEventListener(\"message\", @.onMessage)\n @.ws.close()\n\n delete @.ws\n\n serialize: (message) ->\n if _.isObject(message)\n return JSON.stringify(message)\n return message\n\n sendMessage: (message) ->\n @.pendingMessages.push(message)\n\n if not @.connected\n return\n\n messages = _.map(@.pendingMessages, @.serialize)\n @.pendingMessages = []\n\n for msg in messages\n @.ws.send(msg)\n\n subscribe: (scope, routingKey, callback) ->\n if @.error\n return\n\n @log.debug(\"Subscribe to: #{routingKey}\")\n subscription = {\n scope: scope,\n routingKey: routingKey,\n callback: _.debounce(callback, 500, {\"leading\": true, \"trailing\": false})\n }\n\n message = {\n \"cmd\": \"subscribe\",\n \"routing_key\": routingKey\n }\n\n @.subscriptions[routingKey] = subscription\n @.sendMessage(message)\n scope.$on(\"$destroy\", => @.unsubscribe(routingKey))\n\n unsubscribe: (routingKey) ->\n if @.error\n return\n\n @log.debug(\"Unsubscribe from: #{routingKey}\")\n\n message = {\n \"cmd\": \"unsubscribe\",\n \"routing_key\": routingKey\n }\n\n @.sendMessage(message)\n\n onOpen: ->\n @.connected = true\n\n @log.debug(\"WebSocket connection opened\")\n token = @auth.getToken()\n\n message = {\n cmd: \"auth\"\n data: {token: token, sessionId: @.sessionId}\n }\n\n @.sendMessage(message)\n\n onMessage: (event) ->\n @.log.debug \"WebSocket message received: #{event.data}\"\n\n data = JSON.parse(event.data)\n routingKey = data.routing_key\n\n if not @.subscriptions[routingKey]?\n return\n\n subscription = @.subscriptions[routingKey]\n subscription.scope.$apply ->\n subscription.callback(data.data)\n\n onError: (error) ->\n @log.error(\"WebSocket error: #{error}\")\n @.error = true\n\n onClose: ->\n @log.debug(\"WebSocket closed.\")\n @.connected = false\n\n\nclass EventsProvider\n setSessionId: (sessionId) ->\n @.sessionId = sessionId\n\n $get: ($win, $log, $conf, $auth) ->\n service = new EventsService($win, $log, $conf, $auth)\n service.initialize(@.sessionId)\n return service\n\n @.prototype.$get.$inject = [\"$window\", \"$log\", \"$tgConfig\", \"$tgAuth\"]\n\nmodule.provider(\"$tgEvents\", EventsProvider)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/feedback.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nmixOf = @.taiga.mixOf\ndebounce = @.taiga.debounce\ntrim = @.taiga.trim\n\nmodule = angular.module(\"taigaFeedback\", [])\n\nFeedbackDirective = ($lightboxService, $repo, $confirm, $loading, feedbackService)->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley()\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.create(\"feedback\", $scope.feedback)\n\n promise.then (data) ->\n currentLoading.finish()\n $lightboxService.close($el)\n $confirm.notify(\"success\", \"\\\\o/ we'll be happy to read your\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n openLightbox = ->\n $scope.feedback = {}\n $lightboxService.open($el)\n $el.find(\"textarea\").focus()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n openLightbox()\n\n directive = {\n link: link,\n templateUrl: \"common/lightbox-feedback.html\"\n scope: {}\n }\n\n return directive\n\nmodule.directive(\"tgLbFeedback\", [\"lightboxService\", \"$tgRepo\", \"$tgConfirm\",\n \"$tgLoading\", \"tgFeedbackService\", FeedbackDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/integrations.coffee\n###\n\nmodule = angular.module(\"taigaIntegrations\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues.coffee\n###\n\nmodule = angular.module(\"taigaIssues\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/kanban.coffee\n###\n\nmodule = angular.module(\"taigaKanban\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/projects.coffee\n###\n\nmodule = angular.module(\"taigaProject\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/related-tasks.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaRelatedTasks\", [])\n\nRelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $template, $translate) ->\n templateView = $template.get(\"task/related-task-row.html\", true)\n templateEdit = $template.get(\"task/related-task-row-edit.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n saveTask = debounce 2000, (task) ->\n task.subject = $el.find('input').val()\n\n currentLoading = $loading()\n .target($el.find('.task-name'))\n .start()\n\n promise = $repo.save(task)\n promise.then =>\n currentLoading.finish()\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"related-tasks:update\")\n\n promise.then null, =>\n currentLoading.finish()\n $el.find('input').val(task.subject)\n $confirm.notify(\"error\")\n return promise\n\n renderEdit = (task) ->\n $el.html($compile(templateEdit({task: task}))($scope))\n\n $el.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13\n saveTask($model.$modelValue).then ->\n renderView($model.$modelValue)\n else if event.keyCode == 27\n renderView($model.$modelValue)\n\n $el.on \"click\", \".icon-floppy\", (event) ->\n saveTask($model.$modelValue).then ->\n renderView($model.$modelValue)\n\n $el.on \"click\", \".cancel-edit\", (event) ->\n renderView($model.$modelValue)\n\n renderView = (task) ->\n $el.off()\n\n perms = {\n modify_task: $scope.project.my_permissions.indexOf(\"modify_task\") != -1\n delete_task: $scope.project.my_permissions.indexOf(\"delete_task\") != -1\n }\n\n $el.html($compile(templateView({task: task, perms: perms}))($scope))\n\n $el.on \"click\", \".icon-edit\", ->\n renderEdit($model.$modelValue)\n $el.find('input').focus().select()\n\n $el.on \"click\", \".delete-task\", (event) ->\n title = $translate.instant(\"TASK.TITLE_DELETE_ACTION\")\n task = $model.$modelValue\n message = task.subject\n\n $confirm.askOnDelete(title, message).then (askResponse) ->\n promise = $repo.remove(task)\n promise.then ->\n askResponse.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"related-tasks:delete\")\n\n promise.then null, ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $scope.$watch $attrs.ngModel, (val) ->\n return if not val\n renderView(val)\n\n $scope.$on \"related-tasks:assigned-to-changed\", ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"related-tasks:status-changed\", ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link, require:\"ngModel\"}\n\nmodule.directive(\"tgRelatedTaskRow\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"$tgTemplate\", \"$translate\", RelatedTaskRowDirective])\n\nRelatedTaskCreateFormDirective = ($repo, $compile, $confirm, $tgmodel, $loading, $analytics, $template) ->\n template = $template.get(\"task/related-task-create-form.html\", true)\n\n newTask = {\n subject: \"\"\n assigned_to: null\n }\n\n link = ($scope, $el, $attrs) ->\n createTask = debounce 2000, (task) ->\n task.subject = $el.find('input').val()\n task.assigned_to = $scope.newTask.assigned_to\n task.status = $scope.newTask.status\n $scope.newTask.status = $scope.project.default_task_status\n $scope.newTask.assigned_to = null\n\n currentLoading = $loading()\n .target($el.find('.task-name'))\n .start()\n\n promise = $repo.create(\"tasks\", task)\n promise.then ->\n $analytics.trackEvent(\"task\", \"create\", \"create task on userstory\", 1)\n currentLoading.finish()\n $scope.$emit(\"related-tasks:add\")\n $confirm.notify(\"success\")\n\n promise.then null, ->\n $el.find('input').val(task.subject)\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n return promise\n\n close = () ->\n $el.off()\n $el.html(\"\")\n\n $scope.newRelatedTaskFormOpen = false\n\n render = ->\n $scope.newRelatedTaskFormOpen = true\n\n $el.html($compile(template())($scope))\n $el.find('input').focus().select()\n $el.addClass('active')\n\n $el.on \"keyup\", \"input\", (event)->\n if event.keyCode == 13\n createTask(newTask).then ->\n render()\n else if event.keyCode == 27\n $scope.$apply () -> close()\n\n $el.on \"click\", \".icon-delete\", (event)->\n $scope.$apply () -> close()\n\n $el.on \"click\", \".icon-floppy\", (event)->\n createTask(newTask).then ->\n close()\n\n taiga.bindOnce $scope, \"us\", (val) ->\n newTask[\"status\"] = $scope.project.default_task_status\n newTask[\"project\"] = $scope.project.id\n newTask[\"user_story\"] = $scope.us.id\n $scope.newTask = $tgmodel.make_model(\"tasks\", newTask)\n $el.html(\"\")\n\n $scope.$on \"related-tasks:show-form\", ->\n render()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\nmodule.directive(\"tgRelatedTaskCreateForm\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgLoading\", \"$tgAnalytics\", \"$tgTemplate\", RelatedTaskCreateFormDirective])\n\nRelatedTaskCreateButtonDirective = ($repo, $compile, $confirm, $tgmodel) ->\n template = _.template(\"\"\"\n \n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n $scope.$watch \"project\", (val) ->\n return if not val\n $el.off()\n if $scope.project.my_permissions.indexOf(\"add_task\") != -1\n $el.html($compile(template())($scope))\n else\n $el.html(\"\")\n\n $el.on \"click\", \".icon\", (event)->\n $scope.$emit(\"related-tasks:add-new-clicked\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\nmodule.directive(\"tgRelatedTaskCreateButton\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", RelatedTaskCreateButtonDirective])\n\nRelatedTasksDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n loadTasks = ->\n return $rs.tasks.list($scope.projectId, null, $scope.usId).then (tasks) =>\n $scope.tasks = _.sortBy(tasks, 'ref')\n return tasks\n\n $scope.$on \"related-tasks:add\", ->\n loadTasks().then ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"related-tasks:delete\", ->\n loadTasks().then ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"related-tasks:add-new-clicked\", ->\n $scope.$broadcast(\"related-tasks:show-form\")\n\n taiga.bindOnce $scope, \"us\", (val) ->\n loadTasks()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\nmodule.directive(\"tgRelatedTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", RelatedTasksDirective])\n\nRelatedTaskAssignedToInlineEditionDirective = ($repo, $rootscope, popoverService) ->\n template = _.template(\"\"\"\n \" alt=\"<%- name %>\"/>\n
<%- name %>
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n updateRelatedTask = (task) ->\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\"}\n member = $scope.usersById[task.assigned_to]\n if member\n ctx.imgurl = member.photo\n ctx.name = member.full_name_display\n\n $el.find(\".avatar\").html(template(ctx))\n $el.find(\".task-assignedto\").attr('title', ctx.name)\n\n $ctrl = $el.controller()\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition)\n notAutoSave = $scope.$eval($attrs.notAutoSave)\n autoSave = !notAutoSave\n\n updateRelatedTask(task)\n\n $el.on \"click\", \".task-assignedto\", (event) ->\n $rootscope.$broadcast(\"assigned-to:add\", task)\n\n taiga.bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_task\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$on \"assigned-to:added\", debounce 2000, (ctx, userId, updatedRelatedTask) =>\n if updatedRelatedTask.id == task.id\n updatedRelatedTask.assigned_to = userId\n if autoSave\n $repo.save(updatedRelatedTask).then ->\n $scope.$emit(\"related-tasks:assigned-to-changed\")\n updateRelatedTask(updatedRelatedTask)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgRelatedTaskAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", RelatedTaskAssignedToInlineEditionDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources.coffee\n###\n\ntaiga = @.taiga\n\nclass ResourcesService extends taiga.Service\n\nurls = {\n # Auth\n \"auth\": \"/auth\"\n \"auth-register\": \"/auth/register\"\n \"invitations\": \"/invitations\"\n\n # User\n \"users\": \"/users\"\n \"by_username\": \"/users/by_username\"\n \"users-password-recovery\": \"/users/password_recovery\"\n \"users-change-password-from-recovery\": \"/users/change_password_from_recovery\"\n \"users-change-password\": \"/users/change_password\"\n \"users-change-email\": \"/users/change_email\"\n \"users-cancel-account\": \"/users/cancel\"\n \"user-stats\": \"/users/%s/stats\"\n \"user-liked\": \"/users/%s/liked\"\n \"user-voted\": \"/users/%s/voted\"\n \"user-watched\": \"/users/%s/watched\"\n \"user-contacts\": \"/users/%s/contacts\"\n\n # User - Notification\n \"permissions\": \"/permissions\"\n \"notify-policies\": \"/notify-policies\"\n\n # User - Storage\n \"user-storage\": \"/user-storage\"\n\n # Memberships\n \"memberships\": \"/memberships\"\n \"bulk-create-memberships\": \"/memberships/bulk_create\"\n\n # Roles & Permissions\n \"roles\": \"/roles\"\n \"permissions\": \"/permissions\"\n\n # Resolver\n \"resolver\": \"/resolver\"\n\n # Project\n \"projects\": \"/projects\"\n \"project-templates\": \"/project-templates\"\n \"project-modules\": \"/projects/%s/modules\"\n \"bulk-update-projects-order\": \"/projects/bulk_update_order\"\n \"project-like\": \"/projects/%s/like\"\n \"project-unlike\": \"/projects/%s/unlike\"\n \"project-watch\": \"/projects/%s/watch\"\n \"project-unwatch\": \"/projects/%s/unwatch\"\n\n # Project Values - Choises\n \"userstory-statuses\": \"/userstory-statuses\"\n \"points\": \"/points\"\n \"task-statuses\": \"/task-statuses\"\n \"issue-statuses\": \"/issue-statuses\"\n \"issue-types\": \"/issue-types\"\n \"priorities\": \"/priorities\"\n \"severities\": \"/severities\"\n\n # Milestones/Sprints\n \"milestones\": \"/milestones\"\n\n # User stories\n \"userstories\": \"/userstories\"\n \"bulk-create-us\": \"/userstories/bulk_create\"\n \"bulk-update-us-backlog-order\": \"/userstories/bulk_update_backlog_order\"\n \"bulk-update-us-sprint-order\": \"/userstories/bulk_update_sprint_order\"\n \"bulk-update-us-kanban-order\": \"/userstories/bulk_update_kanban_order\"\n \"userstories-filters\": \"/userstories/filters_data\"\n \"userstory-upvote\": \"/userstories/%s/upvote\"\n \"userstory-downvote\": \"/userstories/%s/downvote\"\n \"userstory-watch\": \"/userstories/%s/watch\"\n \"userstory-unwatch\": \"/userstories/%s/unwatch\"\n\n # Tasks\n \"tasks\": \"/tasks\"\n \"bulk-create-tasks\": \"/tasks/bulk_create\"\n \"bulk-update-task-taskboard-order\": \"/tasks/bulk_update_taskboard_order\"\n \"task-upvote\": \"/tasks/%s/upvote\"\n \"task-downvote\": \"/tasks/%s/downvote\"\n \"task-watch\": \"/tasks/%s/watch\"\n \"task-unwatch\": \"/tasks/%s/unwatch\"\n\n # Issues\n \"issues\": \"/issues\"\n \"bulk-create-issues\": \"/issues/bulk_create\"\n \"issues-filters\": \"/issues/filters_data\"\n \"issue-upvote\": \"/issues/%s/upvote\"\n \"issue-downvote\": \"/issues/%s/downvote\"\n \"issue-watch\": \"/issues/%s/watch\"\n \"issue-unwatch\": \"/issues/%s/unwatch\"\n\n # Wiki pages\n \"wiki\": \"/wiki\"\n \"wiki-restore\": \"/wiki/%s/restore\"\n \"wiki-links\": \"/wiki-links\"\n\n # History\n \"history/us\": \"/history/userstory\"\n \"history/issue\": \"/history/issue\"\n \"history/task\": \"/history/task\"\n \"history/wiki\": \"/history/wiki\"\n\n # Attachments\n \"attachments/us\": \"/userstories/attachments\"\n \"attachments/issue\": \"/issues/attachments\"\n \"attachments/task\": \"/tasks/attachments\"\n \"attachments/wiki_page\": \"/wiki/attachments\"\n\n # Custom Attributess\n \"custom-attributes/userstory\": \"/userstory-custom-attributes\"\n \"custom-attributes/issue\": \"/issue-custom-attributes\"\n \"custom-attributes/task\": \"/task-custom-attributes\"\n\n # Custom Attributess - Values\n \"custom-attributes-values/userstory\": \"/userstories/custom-attributes-values\"\n \"custom-attributes-values/issue\": \"/issues/custom-attributes-values\"\n \"custom-attributes-values/task\": \"/tasks/custom-attributes-values\"\n\n # Webhooks\n \"webhooks\": \"/webhooks\"\n \"webhooks-test\": \"/webhooks/%s/test\"\n \"webhooklogs\": \"/webhooklogs\"\n \"webhooklogs-resend\": \"/webhooklogs/%s/resend\"\n\n # Reports - CSV\n \"userstories-csv\": \"/userstories/csv?uuid=%s\"\n \"tasks-csv\": \"/tasks/csv?uuid=%s\"\n \"issues-csv\": \"/issues/csv?uuid=%s\"\n\n # Timeline\n \"timeline-profile\": \"/timeline/profile\"\n \"timeline-user\": \"/timeline/user\"\n \"timeline-project\": \"/timeline/project\"\n\n # Search\n \"search\": \"/search\"\n\n # Export/Import\n \"exporter\": \"/exporter\"\n \"importer\": \"/importer/load_dump\"\n\n # Feedback\n \"feedback\": \"/feedback\"\n\n # locales\n \"locales\": \"/locales\"\n\n # Application tokens\n \"applications\": \"/applications\"\n \"application-tokens\": \"/application-tokens\"\n}\n\n# Initialize api urls service\ninitUrls = ($log, $urls) ->\n $log.debug \"Initialize api urls\"\n $urls.update(urls)\n\n# Initialize resources service populating it with methods\n# defined in separated files.\ninitResources = ($log, $rs) ->\n $log.debug \"Initialize resources\"\n providers = _.toArray(arguments).slice(2)\n\n for provider in providers\n provider($rs)\n\nmodule = angular.module(\"taigaResources\", [\"taigaBase\"])\nmodule.service(\"$tgResources\", ResourcesService)\n\n# Module entry point\nmodule.run([\"$log\", \"$tgUrls\", initUrls])\nmodule.run([\n \"$log\",\n \"$tgResources\",\n \"$tgProjectsResourcesProvider\",\n \"$tgCustomAttributesResourcesProvider\",\n \"$tgCustomAttributesValuesResourcesProvider\",\n \"$tgMembershipsResourcesProvider\",\n \"$tgNotifyPoliciesResourcesProvider\",\n \"$tgInvitationsResourcesProvider\",\n \"$tgRolesResourcesProvider\",\n \"$tgUserSettingsResourcesProvider\",\n \"$tgSprintsResourcesProvider\",\n \"$tgUserstoriesResourcesProvider\",\n \"$tgTasksResourcesProvider\",\n \"$tgIssuesResourcesProvider\",\n \"$tgWikiResourcesProvider\",\n \"$tgSearchResourcesProvider\",\n \"$tgAttachmentsResourcesProvider\",\n \"$tgMdRenderResourcesProvider\",\n \"$tgHistoryResourcesProvider\",\n \"$tgKanbanResourcesProvider\",\n \"$tgModulesResourcesProvider\",\n \"$tgWebhooksResourcesProvider\",\n \"$tgWebhookLogsResourcesProvider\",\n \"$tgLocalesResourcesProvider\",\n \"$tgUsersResourcesProvider\",\n initResources\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/search.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nmixOf = @.taiga.mixOf\ndebounceLeading = @.taiga.debounceLeading\ntrim = @.taiga.trim\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaSearch\", [])\n\n\n#############################################################################\n## Search Controller\n#############################################################################\n\nclass SearchController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @q, @location, @appMetaService, @navUrls, @translate) ->\n @scope.sectionName = \"Search\"\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"SEARCH.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"SEARCH.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n # Search input watcher\n @scope.searchTerm = null\n loadSearchData = debounceLeading(100, (t) => @.loadSearchData(t))\n\n bindOnce @scope, \"projectId\", (projectId) =>\n if !@scope.searchResults && @scope.searchTerm\n @.loadSearchData()\n\n @scope.$watch \"searchTerm\", (term) =>\n if term != undefined && @scope.projectId\n @.loadSearchData(term)\n\n loadFilters: ->\n defered = @q.defer()\n defered.resolve()\n return defered.promise\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id)\n @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id)\n @scope.severityById = groupBy(project.severities, (x) -> x.id)\n @scope.priorityById = groupBy(project.priorities, (x) -> x.id)\n @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id)\n return project\n\n loadSearchData: (term = \"\") ->\n @scope.loading = true\n\n @._loadSearchData(term).then (data) =>\n if data\n @scope.searchResults = data\n @scope.loading = false\n\n _loadSearchData: (term = \"\") ->\n @.deferredAbort.resolve() if @.deferredAbort\n\n @.deferredAbort = @q.defer()\n\n @rs.search.do(@scope.projectId, term).then (data) =>\n @.deferredAbort.resolve(data)\n\n return @.deferredAbort.promise\n\n loadInitialData: ->\n return @.loadProject().then (project) =>\n @scope.projectId = project.id\n @.fillUsersAndRoles(project.members, project.roles)\n\nmodule.controller(\"SearchController\", SearchController)\n\n\n#############################################################################\n## Search box directive\n#############################################################################\n\nSearchBoxDirective = (projectService, $lightboxService, $navurls, $location, $route)->\n link = ($scope, $el, $attrs) ->\n project = null\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n text = $el.find(\"#search-text\").val()\n\n url = $navurls.resolve(\"project-search\", {project: project.get(\"slug\")})\n\n $scope.$apply ->\n $lightboxService.close($el)\n\n $location.path(url)\n $location.search(\"text\", text).path(url)\n $route.reload()\n\n\n openLightbox = () ->\n project = projectService.project\n\n $lightboxService.open($el).then () ->\n $el.find(\"#search-text\").focus()\n\n $el.on \"submit\", \"form\", submit\n\n openLightbox()\n\n return {\n templateUrl: \"search/lightbox-search.html\",\n link:link\n }\n\nSearchBoxDirective.$inject = [\n \"tgProjectService\",\n \"lightboxService\",\n \"$tgNavUrls\",\n \"$tgLocation\",\n \"$route\"\n]\n\nmodule.directive(\"tgSearchBox\", SearchBoxDirective)\n\n\n#############################################################################\n## Search Directive\n#############################################################################\n\nSearchDirective = ($log, $compile, $templatecache, $routeparams, $location) ->\n linkTable = ($scope, $el, $attrs, $ctrl) ->\n applyAutoTab = true\n activeSectionName = \"userstories\"\n tabsDom = $el.find(\"section.search-filter\")\n lastSearchResults = null\n\n getActiveSection = (data) ->\n maxVal = 0\n selectedSection = {}\n selectedSection.name = \"userstories\"\n selectedSection.value = []\n\n if !applyAutoTab\n selectedSection.name = activeSectionName\n selectedSection.value = data[activeSectionName]\n\n return selectedSection\n\n if data\n for name in [\"userstories\", \"issues\", \"tasks\", \"wikipages\"]\n value = data[name]\n\n if value.length > maxVal\n maxVal = value.length\n selectedSection.name = name\n selectedSection.value = value\n break;\n\n if maxVal == 0\n return selectedSection\n\n return selectedSection\n\n renderFilterTabs = (data) ->\n for name, value of data\n continue if name == \"count\"\n tabsDom.find(\"li.#{name} .num\").html(value.length)\n\n markSectionTabActive = (section) ->\n # Mark as active the item with max amount of results\n tabsDom.find(\"a.active\").removeClass(\"active\")\n tabsDom.find(\"li.#{section.name} a\").addClass(\"active\")\n\n applyAutoTab = false\n activeSectionName = section.name\n\n templates = {\n issues: $templatecache.get(\"search-issues\")\n tasks: $templatecache.get(\"search-tasks\")\n userstories: $templatecache.get(\"search-userstories\")\n wikipages: $templatecache.get(\"search-wikipages\")\n }\n\n renderTableContent = (section) ->\n oldElements = $el.find(\".search-result-table\").children()\n oldScope = oldElements.scope()\n\n if oldScope\n oldScope.$destroy()\n oldElements.remove()\n\n scope = $scope.$new()\n scope[section.name] = section.value\n\n template = angular.element.parseHTML(trim(templates[section.name]))\n element = $compile(template)(scope)\n $el.find(\".search-result-table\").html(element)\n\n $scope.$watch \"searchResults\", (data) ->\n lastSearchResults = data\n\n return if !lastSearchResults\n\n activeSection = getActiveSection(data)\n\n renderFilterTabs(data)\n\n renderTableContent(activeSection)\n markSectionTabActive(activeSection)\n\n $scope.$watch \"searchTerm\", (searchTerm) ->\n $location.search(\"text\", searchTerm) if searchTerm != undefined\n\n $el.on \"click\", \".search-filter li > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n sectionName = target.parent().data(\"name\")\n sectionData = if !lastSearchResults then [] else lastSearchResults[sectionName]\n\n section = {\n name: sectionName,\n value: sectionData\n }\n\n $scope.$apply ->\n renderTableContent(section)\n markSectionTabActive(section)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n linkTable($scope, $el, $attrs, $ctrl)\n\n searchText = $routeparams.text\n $scope.$watch \"projectId\", (projectId) ->\n $scope.searchTerm = searchText if projectId?\n\n return {link:link}\n\nmodule.directive(\"tgSearch\", [\"$log\", \"$compile\", \"$templateCache\", \"$routeParams\", \"$tgLocation\",\n SearchDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard.coffee\n###\n\nmodule = angular.module(\"taigaTaskboard\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/tasks.coffee\n###\n\nmodule = angular.module(\"taigaTasks\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/team.coffee\n###\n\nmodule = angular.module(\"taigaTeam\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings.coffee\n###\n\nmodule = angular.module(\"taigaUserSettings\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/userstories.coffee\n###\n\nmodule = angular.module(\"taigaUserStories\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/wiki.coffee\n###\n\nmodule = angular.module(\"taigaWiki\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/analytics.coffee\n###\n\ntaiga = @.taiga\nmodule = angular.module(\"taigaCommon\")\n\n\nclass AnalyticsService extends taiga.Service\n @.$inject = [\"$rootScope\", \"$log\", \"$tgConfig\", \"$window\", \"$document\", \"$location\"]\n\n constructor: (@rootscope, @log, @config, @win, @doc, @location) ->\n @.initialized = false\n\n conf = @config.get(\"analytics\", {})\n\n @.accountId = conf.accountId\n @.pageEvent = conf.pageEvent or \"$routeChangeSuccess\"\n @.trackRoutes = conf.trackRoutes or true\n @.ignoreFirstPageLoad = conf.ignoreFirstPageLoad or false\n\n initialize: ->\n if not @.accountId\n @log.debug \"Analytics: no acount id provided. Disabling.\"\n return\n\n @.injectAnalytics()\n\n @win.ga(\"create\", @.accountId, \"auto\")\n @win.ga(\"require\", \"displayfeatures\")\n\n if @.trackRoutes and (not @.ignoreFirstPageLoad)\n @win.ga(\"send\", \"pageview\", @.getUrl())\n\n # activates page tracking\n if @.trackRoutes\n @rootscope.$on @.pageEvent, =>\n @.trackPage(@.getUrl(), \"Taiga\")\n\n @.initialized = true\n\n getUrl: ->\n return @location.path()\n\n injectAnalytics: ->\n fn = `(function(i,s,o,g,r,a,m){i[\"GoogleAnalyticsObject\"]=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m);})`\n fn(window, document, \"script\", \"//www.google-analytics.com/analytics.js\", \"ga\")\n\n trackPage: (url, title) ->\n return if not @.initialized\n return if not @win.ga\n\n title = title or @doc[0].title\n @win.ga(\"send\", \"pageview\", {\n \"page\": url,\n \"title\": title\n })\n\n trackEvent: (category, action, label, value) ->\n return if not @.initialized\n return if not @win.ga\n\n @win.ga(\"send\", \"event\", category, action, label, value)\n\n\nmodule.service(\"$tgAnalytics\", AnalyticsService)\n\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/attachments.coffee\n###\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\nbindOnce = @.taiga.bindOnce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaCommon\")\n\n\nclass AttachmentsController extends taiga.Controller\n @.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\", \"$translate\"]\n\n constructor: (@scope, @rootscope, @repo, @rs, @confirm, @q, @translate) ->\n bindMethods(@)\n @.type = null\n @.objectId = null\n @.projectId = null\n\n @.uploadingAttachments = []\n @.attachments = []\n @.attachmentsCount = 0\n @.deprecatedAttachmentsCount = 0\n @.showDeprecated = false\n\n initialize: (type, objectId) ->\n @.type = type\n @.objectId = objectId\n @.projectId = @scope.projectId\n\n loadAttachments: ->\n return @.attachments if not @.objectId\n\n urlname = \"attachments/#{@.type}\"\n\n return @rs.attachments.list(urlname, @.objectId, @.projectId).then (attachments) =>\n @.attachments = _.sortBy(attachments, \"order\")\n @.updateCounters()\n return attachments\n\n updateCounters: ->\n @.attachmentsCount = @.attachments.length\n @.deprecatedAttachmentsCount = _.filter(@.attachments, {is_deprecated: true}).length\n\n _createAttachment: (attachment) ->\n urlName = \"attachments/#{@.type}\"\n\n promise = @rs.attachments.create(urlName, @.projectId, @.objectId, attachment)\n promise = promise.then (data) =>\n data.isCreatedRightNow = true\n\n index = @.uploadingAttachments.indexOf(attachment)\n @.uploadingAttachments.splice(index, 1)\n @.attachments.push(data)\n @rootscope.$broadcast(\"attachment:create\")\n\n promise = promise.then null, (data) =>\n @scope.$emit(\"attachments:size-error\") if data.status == 413\n\n index = @.uploadingAttachments.indexOf(attachment)\n @.uploadingAttachments.splice(index, 1)\n\n message = @translate.instant(\"ATTACHMENT.ERROR_UPLOAD_ATTACHMENT\", {\n fileName: attachment.name, errorMessage: data.data._error_message})\n @confirm.notify(\"error\", message)\n return @q.reject(data)\n\n return promise\n\n # Create attachments in bulk\n createAttachments: (attachments) ->\n promises = _.map(attachments, (x) => @._createAttachment(x))\n return @q.all(promises).then =>\n @.updateCounters()\n\n # Add uploading attachment tracking.\n addUploadingAttachments: (attachments) ->\n @.uploadingAttachments = _.union(@.uploadingAttachments, attachments)\n\n # Change order of attachment in a ordered list.\n # This function is mainly executed after sortable ends.\n reorderAttachment: (attachment, newIndex) ->\n oldIndex = @.attachments.indexOf(attachment)\n return if oldIndex == newIndex\n\n @.attachments.splice(oldIndex, 1)\n @.attachments.splice(newIndex, 0, attachment)\n\n _.each(@.attachments, (x,i) -> x.order = i+1)\n\n # Persist one concrete attachment.\n # This function is mainly used when user clicks\n # to save button for save one unique attachment.\n updateAttachment: (attachment) ->\n onSuccess = =>\n @.updateCounters()\n @rootscope.$broadcast(\"attachment:edit\")\n\n onError = (response) =>\n $scope.$emit(\"attachments:size-error\") if response.status == 413\n @confirm.notify(\"error\")\n return @q.reject()\n\n return @repo.save(attachment).then(onSuccess, onError)\n\n # Persist all pending modifications on attachments.\n # This function is used mainly for persist the order\n # after sorting.\n saveAttachments: ->\n return @repo.saveAll(@.attachments).then null, =>\n for item in @.attachments\n item.revert()\n @.attachments = _.sortBy(@.attachments, \"order\")\n\n # Remove one concrete attachment.\n removeAttachment: (attachment) ->\n title = @translate.instant(\"ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT\")\n message = @translate.instant(\"ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT\", {fileName: attachment.name})\n\n return @confirm.askOnDelete(title, message).then (askResponse) =>\n onSuccess = =>\n askResponse.finish()\n index = @.attachments.indexOf(attachment)\n @.attachments.splice(index, 1)\n @.updateCounters()\n @rootscope.$broadcast(\"attachment:delete\")\n\n onError = =>\n askResponse.finish(false)\n message = @translate.instant(\"ATTACHMENT.ERROR_DELETE_ATTACHMENT\", {errorMessage: message})\n @confirm.notify(\"error\", null, message)\n return @q.reject()\n\n return @repo.remove(attachment).then(onSuccess, onError)\n\n # Function used in template for filter visible attachments\n filterAttachments: (item) ->\n if @.showDeprecated\n return true\n return not item.is_deprecated\n\n\nAttachmentsDirective = ($config, $confirm, $templates, $translate) ->\n template = $templates.get(\"attachment/attachments.html\", true)\n\n link = ($scope, $el, $attrs, $ctrls) ->\n $ctrl = $ctrls[0]\n $model = $ctrls[1]\n\n bindOnce $scope, $attrs.ngModel, (value) ->\n $ctrl.initialize($attrs.type, value.id)\n $ctrl.loadAttachments()\n\n tdom = $el.find(\"div.attachment-body.sortable\")\n tdom.sortable({\n items: \"div.single-attachment\"\n handle: \"a.settings.icon.icon-drag-v\"\n containment: \".attachments\"\n dropOnEmpty: true\n scroll: false\n tolerance: \"pointer\"\n placeholder: \"sortable-placeholder single-attachment\"\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n attachment = ui.item.scope().attach\n newIndex = ui.item.index()\n\n $ctrl.reorderAttachment(attachment, newIndex)\n $ctrl.saveAttachments().then ->\n $scope.$emit(\"attachment:edit\")\n\n showSizeInfo = ->\n $el.find(\".size-info\").removeClass(\"hidden\")\n\n $scope.$on \"attachments:size-error\", ->\n showSizeInfo()\n\n $el.on \"change\", \".attachments-header input\", (event) ->\n files = _.toArray(event.target.files)\n\n return if files.length < 1\n\n $scope.$apply ->\n $ctrl.addUploadingAttachments(files)\n $ctrl.createAttachments(files)\n\n $el.on \"click\", \".more-attachments\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n $scope.$apply ->\n $ctrl.showDeprecated = not $ctrl.showDeprecated\n\n target.find(\"span.text\").addClass(\"hidden\")\n if $ctrl.showDeprecated\n target.find(\"span[data-type=hide]\").removeClass(\"hidden\")\n target.find(\"more-attachments-num\").addClass(\"hidden\")\n else\n target.find(\"span[data-type=show]\").removeClass(\"hidden\")\n target.find(\"more-attachments-num\").removeClass(\"hidden\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n templateFn = ($el, $attrs) ->\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n maxFileSize = sizeFormat(maxFileSize) if maxFileSize\n maxFileSizeMsg = if maxFileSize then $translate.instant(\"ATTACHMENT.MAX_UPLOAD_SIZE\", {maxFileSize: maxFileSize}) else \"\"\n ctx = {\n type: $attrs.type\n maxFileSize: maxFileSize\n maxFileSizeMsg: maxFileSizeMsg\n }\n return template(ctx)\n\n return {\n require: [\"tgAttachments\", \"ngModel\"]\n controller: AttachmentsController\n controllerAs: \"ctrl\"\n restrict: \"AE\"\n scope: true\n link: link\n template: templateFn\n }\n\nmodule.directive(\"tgAttachments\", [\"$tgConfig\", \"$tgConfirm\", \"$tgTemplate\", \"$translate\", AttachmentsDirective])\n\n\nAttachmentDirective = ($template, $compile, $translate, $rootScope) ->\n template = $template.get(\"attachment/attachment.html\", true)\n templateEdit = $template.get(\"attachment/attachment-edit.html\", true)\n\n link = ($scope, $el, $attrs, $ctrl) ->\n render = (attachment, edit=false) ->\n permissions = $scope.project.my_permissions\n modifyPermission = permissions.indexOf(\"modify_#{$ctrl.type}\") > -1\n\n ctx = {\n id: attachment.id\n name: attachment.name\n title : $translate.instant(\"ATTACHMENT.TITLE\", {\n fileName: attachment.name,\n date: moment(attachment.created_date).format($translate.instant(\"ATTACHMENT.DATE\"))})\n url: attachment.url\n size: sizeFormat(attachment.size)\n description: attachment.description\n isDeprecated: attachment.is_deprecated\n modifyPermission: modifyPermission\n }\n\n if edit\n html = $compile(templateEdit(ctx))($scope)\n else\n html = $compile(template(ctx))($scope)\n\n $el.html(html)\n\n if attachment.is_deprecated\n $el.addClass(\"deprecated\")\n $el.find(\"input:checkbox\").prop('checked', true)\n else\n $el.removeClass(\"deprecated\")\n\n saveAttachment = ->\n attachment.description = $el.find(\"input[name='description']\").val()\n attachment.is_deprecated = $el.find(\"input[name='is-deprecated']\").prop(\"checked\")\n attachment.isCreatedRightNow = false\n\n $scope.$apply ->\n $ctrl.updateAttachment(attachment).then ->\n render(attachment, false)\n\n ## Actions (on edit mode)\n $el.on \"click\", \"a.editable-settings.icon-floppy\", (event) ->\n event.preventDefault()\n saveAttachment()\n\n $el.on \"keyup\", \"input[name=description]\", (event) ->\n if event.keyCode == 13\n saveAttachment()\n else if event.keyCode == 27\n $scope.$apply -> render(attachment, false)\n\n $el.on \"click\", \"a.editable-settings.icon-delete\", (event) ->\n event.preventDefault()\n render(attachment, false)\n\n ## Actions (on view mode)\n $el.on \"click\", \"a.settings.icon-edit\", (event) ->\n event.preventDefault()\n render(attachment, true)\n $el.find(\"input[name='description']\").focus().select()\n\n $el.on \"click\", \"a.settings.icon-delete\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $ctrl.removeAttachment(attachment)\n\n $el.on \"click\", \"div.attachment-name a\", (event) ->\n if null != attachment.name.match(/\\.(jpe?g|png|gif|gifv|webm)/i)\n event.preventDefault()\n $scope.$apply ->\n $rootScope.$broadcast(\"attachment:preview\", attachment)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n # Bootstrap\n attachment = $scope.$eval($attrs.tgAttachment)\n render(attachment, attachment.isCreatedRightNow)\n if attachment.isCreatedRightNow\n $el.find(\"input[name='description']\").focus().select()\n\n return {\n link: link\n require: \"^tgAttachments\"\n restrict: \"AE\"\n }\n\nmodule.directive(\"tgAttachment\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$rootScope\", AttachmentDirective])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: bind-scope.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\nBindScope = (config) ->\n if !config.debugInfo\n jQuery.fn.scope = () -> this.data('scope')\n\n link = ($scope, $el) ->\n if !config.debugInfo\n $el\n .data('scope', $scope)\n .addClass('tg-scope')\n\n return {link: link}\n\nmodule.directive(\"tgBindScope\", [\"$tgConfig\", BindScope])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: compile-html.directive.coffee\n###\n\nCompileHtmlDirective = ($compile) ->\n link = (scope, element, attrs) ->\n scope.$watch attrs.tgCompileHtml, (newValue, oldValue) ->\n element.html(newValue)\n $compile(element.contents())(scope)\n\n return {\n link: link\n }\n\nCompileHtmlDirective.$inject = [\"$compile\"]\n\nangular.module(\"taigaCommon\").directive(\"tgCompileHtml\", CompileHtmlDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/components.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaCommon\")\n\n\n#############################################################################\n## Date Range Directive (used mainly for sprint date range)\n#############################################################################\n\nDateRangeDirective = ($translate) ->\n renderRange = ($el, first, second) ->\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\")\n initDate = moment(first).format(prettyDate)\n endDate = moment(second).format(prettyDate)\n $el.html(\"#{initDate}-#{endDate}\")\n\n link = ($scope, $el, $attrs) ->\n [first, second] = $attrs.tgDateRange.split(\",\")\n\n bindOnce $scope, first, (valFirst) ->\n bindOnce $scope, second, (valSecond) ->\n renderRange($el, valFirst, valSecond)\n\n return {link:link}\n\nmodule.directive(\"tgDateRange\", [\"$translate\", DateRangeDirective])\n\n\n#############################################################################\n## Date Selector Directive (using pikaday)\n#############################################################################\n\nDateSelectorDirective = ($rootscope, datePickerConfigService) ->\n link = ($scope, $el, $attrs, $model) ->\n selectedDate = null\n\n initialize = () ->\n datePickerConfig = datePickerConfigService.get()\n\n _.merge(datePickerConfig, {\n field: $el[0]\n onSelect: (date) =>\n selectedDate = date\n onOpen: =>\n $el.picker.setDate(selectedDate) if selectedDate?\n })\n\n $el.picker = new Pikaday(datePickerConfig)\n\n unbind = $rootscope.$on \"$translateChangeEnd\", (ctx) => initialize()\n\n $scope.$watch $attrs.ngModel, (val) ->\n initialize() if val? and not $el.picker\n $el.picker.setDate(val) if val?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n unbind()\n\n return {\n link: link\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgDateSelector\", [\"$rootScope\", \"tgDatePickerConfigService\", DateSelectorDirective])\n\n\n#############################################################################\n## Sprint Progress Bar Directive\n#############################################################################\n\nSprintProgressBarDirective = ->\n renderProgress = ($el, percentage, visual_percentage) ->\n if $el.hasClass(\".current-progress\")\n $el.css(\"width\", \"#{percentage}%\")\n else\n $el.find(\".current-progress\").css(\"width\", \"#{visual_percentage}%\")\n $el.find(\".number\").html(\"#{percentage} %\")\n\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgSprintProgressbar, (sprint) ->\n closedPoints = sprint.closed_points\n totalPoints = sprint.total_points\n percentage = 0\n percentage = Math.round(100 * (closedPoints/totalPoints)) if totalPoints != 0\n visual_percentage = 0\n #Visual hack for .current-progress bar\n visual_percentage = Math.round(98 * (closedPoints/totalPoints)) if totalPoints != 0\n\n renderProgress($el, percentage, visual_percentage)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgSprintProgressbar\", SprintProgressBarDirective)\n\n\n#############################################################################\n## Created-by display directive\n#############################################################################\n\nCreatedByDisplayDirective = ($template, $compile, $translate, $navUrls)->\n # Display the owner information (full name and photo) and the date of\n # creation of an object (like USs, tasks and issues).\n #\n # Example:\n # div.us-created-by(tg-created-by-display, ng-model=\"us\")\n #\n # Requirements:\n # - model object must have the attributes 'created_date' and\n # 'owner'(ng-model)\n # - scope.usersById object is required.\n\n template = $template.get(\"common/components/created-by.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (model) ->\n owner = model.owner_extra_info or {\n full_name_display: $translate.instant(\"COMMON.EXTERNAL_USER\")\n photo: \"/images/user-noimage.png\"\n }\n\n html = template({\n owner: owner\n url: if owner?.is_active then $navUrls.resolve(\"user-profile\", {username: owner.username}) else \"\"\n date: moment(model.created_date).format($translate.instant(\"COMMON.DATETIME\"))\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n bindOnce $scope, $attrs.ngModel, (model) ->\n render(model) if model?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgCreatedByDisplay\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$tgNavUrls\",\n CreatedByDisplayDirective])\n\n\n#############################################################################\n## Watchers directive\n#############################################################################\n\nWatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile, $translate) ->\n # You have to include a div with the tg-lb-watchers directive in the page\n # where use this directive\n template = $template.get(\"common/components/watchers.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project?.my_permissions?.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (watchers) =>\n item = $model.$modelValue.clone()\n item.watchers = watchers\n $model.$setViewValue(item)\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n watchers = _.map(watchers, (watcherId) -> $scope.usersById[watcherId])\n renderWatchers(watchers)\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $model.$modelValue.revert()\n\n deleteWatcher = $qqueue.bindAdd (watcherIds) =>\n item = $model.$modelValue.clone()\n item.watchers = watcherIds\n $model.$setViewValue(item)\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n watchers = _.map(item.watchers, (watcherId) -> $scope.usersById[watcherId])\n renderWatchers(watchers)\n $rootscope.$broadcast(\"object:updated\")\n promise.then null, ->\n item.revert()\n $confirm.notify(\"error\")\n\n\n renderWatchers = (watchers) ->\n ctx = {\n watchers: watchers\n isEditable: isEditable()\n }\n\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n $el.on \"click\", \".js-delete-watcher\", (event) ->\n event.preventDefault()\n return if not isEditable()\n target = angular.element(event.currentTarget)\n watcherId = target.data(\"watcher-id\")\n\n title = $translate.instant(\"COMMON.WATCHERS.TITLE_LIGHTBOX_DELETE_WARTCHER\")\n message = $scope.usersById[watcherId].full_name_display\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n askResponse.finish()\n\n watcherIds = _.clone($model.$modelValue.watchers, false)\n watcherIds = _.pull(watcherIds, watcherId)\n\n deleteWatcher(watcherIds)\n\n $el.on \"click\", \".js-add-watcher\", (event) ->\n event.preventDefault()\n return if not isEditable()\n $scope.$apply ->\n $rootscope.$broadcast(\"watcher:add\", $model.$modelValue)\n\n $scope.$on \"watcher:added\", (ctx, watcherId) ->\n watchers = _.clone($model.$modelValue.watchers, false)\n watchers.push(watcherId)\n watchers = _.uniq(watchers)\n\n save(watchers)\n\n $scope.$watch $attrs.ngModel, (item) ->\n return if not item?\n watchers = _.map(item.watchers, (watcherId) -> $scope.usersById[watcherId])\n renderWatchers(watchers)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link, require:\"ngModel\"}\n\nmodule.directive(\"tgWatchers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\",\n \"$translate\", WatchersDirective])\n\n\n#############################################################################\n## Assigned to directive\n#############################################################################\n\nAssignedToDirective = ($rootscope, $confirm, $repo, $loading, $qqueue, $template, $translate, $compile) ->\n # You have to include a div with the tg-lb-assignedto directive in the page\n # where use this directive\n template = $template.get(\"common/components/assigned-to.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project?.my_permissions?.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (userId) =>\n $model.$modelValue.assigned_to = userId\n\n currentLoading = $loading()\n .target($el)\n .start()\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n renderAssignedTo($model.$modelValue)\n $rootscope.$broadcast(\"object:updated\")\n promise.then null, ->\n $model.$modelValue.revert()\n $confirm.notify(\"error\")\n currentLoading.finish()\n\n return promise\n\n renderAssignedTo = (issue) ->\n assignedToId = issue?.assigned_to\n assignedTo = if assignedToId? then $scope.usersById[assignedToId] else null\n\n ctx = {\n assignedTo: assignedTo\n isEditable: isEditable()\n }\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n $el.on \"click\", \".user-assigned\", (event) ->\n event.preventDefault()\n return if not isEditable()\n $scope.$apply ->\n $rootscope.$broadcast(\"assigned-to:add\", $model.$modelValue)\n\n $el.on \"click\", \".icon-delete\", (event) ->\n event.preventDefault()\n return if not isEditable()\n title = $translate.instant(\"COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED\")\n\n $confirm.ask(title).then (response) =>\n response.finish()\n $model.$modelValue.assigned_to = null\n save(null)\n\n $scope.$on \"assigned-to:added\", (ctx, userId, item) ->\n return if item.id != $model.$modelValue.id\n\n save(userId)\n\n $scope.$watch $attrs.ngModel, (instance) ->\n renderAssignedTo(instance)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link,\n require:\"ngModel\"\n }\n\nmodule.directive(\"tgAssignedTo\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$translate\", \"$compile\",\n AssignedToDirective])\n\n\n#############################################################################\n## Block Button directive\n#############################################################################\n\nBlockButtonDirective = ($rootscope, $loading, $template) ->\n template = $template.get(\"common/components/block-button.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n $scope.$watch $attrs.ngModel, (item) ->\n return if not item\n\n if isEditable()\n $el.find('.item-block').addClass('editable')\n\n if item.is_blocked\n $el.find('.item-block').hide()\n $el.find('.item-unblock').show()\n else\n $el.find('.item-block').show()\n $el.find('.item-unblock').hide()\n\n $el.on \"click\", \".item-block\", (event) ->\n event.preventDefault()\n $rootscope.$broadcast(\"block\", $model.$modelValue)\n\n $el.on \"click\", \".item-unblock\", (event) ->\n event.preventDefault()\n currentLoading = $loading()\n .target($el.find(\".item-unblock\"))\n .start()\n\n finish = ->\n currentLoading.finish()\n\n $rootscope.$broadcast(\"unblock\", $model.$modelValue, finish)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgBlockButton\", [\"$rootScope\", \"$tgLoading\", \"$tgTemplate\", BlockButtonDirective])\n\n\n#############################################################################\n## Delete Button directive\n#############################################################################\n\nDeleteButtonDirective = ($log, $repo, $confirm, $location, $template) ->\n template = $template.get(\"common/components/delete-button.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n if not $attrs.onDeleteGoToUrl\n return $log.error \"DeleteButtonDirective requires on-delete-go-to-url set in scope.\"\n if not $attrs.onDeleteTitle\n return $log.error \"DeleteButtonDirective requires on-delete-title set in scope.\"\n\n $el.on \"click\", \".button-delete\", (event) ->\n title = $attrs.onDeleteTitle\n subtitle = $model.$modelValue.subject\n\n $confirm.askOnDelete(title, subtitle).then (askResponse) =>\n promise = $repo.remove($model.$modelValue)\n promise.then =>\n askResponse.finish()\n url = $scope.$eval($attrs.onDeleteGoToUrl)\n $location.path(url)\n promise.then null, =>\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgDeleteButton\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgTemplate\", DeleteButtonDirective])\n\n\n#############################################################################\n## Editable subject directive\n#############################################################################\n\nEditableSubjectDirective = ($rootscope, $repo, $confirm, $loading, $qqueue, $template) ->\n template = $template.get(\"common/components/editable-subject.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n\n $scope.$on \"object:updated\", () ->\n $el.find('.edit-subject').hide()\n $el.find('.view-subject').show()\n\n isEditable = ->\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (subject) =>\n $model.$modelValue.subject = subject\n\n currentLoading = $loading()\n .target($el.find('.save-container'))\n .start()\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n $el.find('.edit-subject').hide()\n $el.find('.view-subject').show()\n promise.then null, ->\n $confirm.notify(\"error\")\n promise.finally ->\n currentLoading.finish()\n\n return promise\n\n $el.click ->\n return if not isEditable()\n $el.find('.edit-subject').show()\n $el.find('.view-subject').hide()\n $el.find('input').focus()\n\n $el.on \"click\", \".save\", (e) ->\n e.preventDefault()\n\n subject = $scope.item.subject\n save(subject)\n\n $el.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13\n subject = $scope.item.subject\n save(subject)\n else if event.keyCode == 27\n $scope.$apply () => $model.$modelValue.revert()\n\n $el.find('div.edit-subject').hide()\n $el.find('div.view-subject').show()\n\n $el.find('div.edit-subject').hide()\n $el.find('div.view-subject span.edit').hide()\n\n $scope.$watch $attrs.ngModel, (value) ->\n return if not value\n $scope.item = value\n\n if not isEditable()\n $el.find('.view-subject .edit').remove()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgEditableSubject\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\",\n \"$tgTemplate\", EditableSubjectDirective])\n\n\n#############################################################################\n## Editable description directive\n#############################################################################\n\nEditableDescriptionDirective = ($rootscope, $repo, $confirm, $compile, $loading, $selectedText, $qqueue, $template) ->\n template = $template.get(\"common/components/editable-description.html\")\n noDescriptionMegEditMode = $template.get(\"common/components/editable-description-msg-edit-mode.html\")\n noDescriptionMegReadMode = $template.get(\"common/components/editable-description-msg-read-mode.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n $el.find('.edit-description').hide()\n $el.find('.view-description .edit').hide()\n\n $scope.$on \"object:updated\", () ->\n $el.find('.edit-description').hide()\n $el.find('.view-description').show()\n\n isEditable = ->\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (description) =>\n $model.$modelValue.description = description\n\n currentLoading = $loading()\n .target($el.find('.save-container'))\n .start()\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n $el.find('.edit-description').hide()\n $el.find('.view-description').show()\n promise.then null, ->\n $confirm.notify(\"error\")\n promise.finally ->\n currentLoading.finish()\n\n $el.on \"mouseup\", \".view-description\", (event) ->\n # We want to dettect the a inside the div so we use the target and\n # not the currentTarget\n target = angular.element(event.target)\n return if not isEditable()\n return if target.is('a')\n return if $selectedText.get().length\n\n $el.find('.edit-description').show()\n $el.find('.view-description').hide()\n $el.find('textarea').focus()\n\n $el.on \"click\", \"a\", (event) ->\n target = angular.element(event.target)\n href = target.attr('href')\n if href.indexOf(\"#\") == 0\n event.preventDefault()\n $('body').scrollTop($(href).offset().top)\n\n $el.on \"click\", \".save\", (e) ->\n e.preventDefault()\n\n description = $scope.item.description\n save(description)\n\n $el.on \"keydown\", \"textarea\", (event) ->\n if event.keyCode == 27\n $scope.$apply () => $scope.item.revert()\n $el.find('.edit-description').hide()\n $el.find('.view-description').show()\n\n $scope.$watch $attrs.ngModel, (value) ->\n return if not value\n $scope.item = value\n\n if isEditable()\n $el.find('.view-description .edit').show()\n $el.find('.view-description .us-content').addClass('editable')\n $scope.noDescriptionMsg = $compile(noDescriptionMegEditMode)($scope)\n else\n $scope.noDescriptionMsg = $compile(noDescriptionMegReadMode)($scope)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgEditableDescription\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\", \"$tgLoading\",\n \"$selectedText\", \"$tgQqueue\", \"$tgTemplate\", EditableDescriptionDirective])\n\n\n#############################################################################\n## Common list directives\n#############################################################################\n## NOTE: These directives are used in issues and search and are\n## completely bindonce, they only serves for visualization of data.\n#############################################################################\n\nListItemUsStatusDirective = ->\n link = ($scope, $el, $attrs) ->\n us = $scope.$eval($attrs.tgListitemUsStatus)\n bindOnce $scope, \"usStatusById\", (usStatusById) ->\n $el.html(usStatusById[us.status].name)\n\n return {link:link}\n\nmodule.directive(\"tgListitemUsStatus\", ListItemUsStatusDirective)\n\n\nListItemTaskStatusDirective = ->\n link = ($scope, $el, $attrs) ->\n task = $scope.$eval($attrs.tgListitemTaskStatus)\n bindOnce $scope, \"taskStatusById\", (taskStatusById) ->\n $el.html(taskStatusById[task.status].name)\n\n return {link:link}\n\nmodule.directive(\"tgListitemTaskStatus\", ListItemTaskStatusDirective)\n\n\nListItemAssignedtoDirective = ($template) ->\n template = $template.get(\"common/components/list-item-assigned-to-avatar.html\", true)\n\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"usersById\", (usersById) ->\n item = $scope.$eval($attrs.tgListitemAssignedto)\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\"}\n\n member = usersById[item.assigned_to]\n if member\n ctx.imgurl = member.photo\n ctx.name = member.full_name_display\n\n $el.html(template(ctx))\n\n return {link:link}\n\nmodule.directive(\"tgListitemAssignedto\", [\"$tgTemplate\", ListItemAssignedtoDirective])\n\n\nListItemIssueStatusDirective = ->\n link = ($scope, $el, $attrs) ->\n issue = $scope.$eval($attrs.tgListitemIssueStatus)\n bindOnce $scope, \"issueStatusById\", (issueStatusById) ->\n $el.html(issueStatusById[issue.status].name)\n\n return {link:link}\n\nmodule.directive(\"tgListitemIssueStatus\", ListItemIssueStatusDirective)\n\n\nListItemTypeDirective = ->\n link = ($scope, $el, $attrs) ->\n render = (issueTypeById, issue) ->\n type = issueTypeById[issue.type]\n domNode = $el.find(\".level\")\n domNode.css(\"background-color\", type.color)\n domNode.attr(\"title\", type.name)\n\n bindOnce $scope, \"issueTypeById\", (issueTypeById) ->\n issue = $scope.$eval($attrs.tgListitemType)\n render(issueTypeById, issue)\n\n $scope.$watch $attrs.tgListitemType, (issue) ->\n render($scope.issueTypeById, issue)\n\n return {\n link: link\n templateUrl: \"common/components/level.html\"\n }\n\nmodule.directive(\"tgListitemType\", ListItemTypeDirective)\n\n\nListItemPriorityDirective = ->\n link = ($scope, $el, $attrs) ->\n render = (priorityById, issue) ->\n priority = priorityById[issue.priority]\n domNode = $el.find(\".level\")\n domNode.css(\"background-color\", priority.color)\n domNode.attr(\"title\", priority.name)\n\n bindOnce $scope, \"priorityById\", (priorityById) ->\n issue = $scope.$eval($attrs.tgListitemPriority)\n render(priorityById, issue)\n\n $scope.$watch $attrs.tgListitemPriority, (issue) ->\n render($scope.priorityById, issue)\n\n return {\n link: link\n templateUrl: \"common/components/level.html\"\n }\n\nmodule.directive(\"tgListitemPriority\", ListItemPriorityDirective)\n\n\nListItemSeverityDirective = ->\n link = ($scope, $el, $attrs) ->\n render = (severityById, issue) ->\n severity = severityById[issue.severity]\n domNode = $el.find(\".level\")\n domNode.css(\"background-color\", severity.color)\n domNode.attr(\"title\", severity.name)\n\n bindOnce $scope, \"severityById\", (severityById) ->\n issue = $scope.$eval($attrs.tgListitemSeverity)\n render(severityById, issue)\n\n $scope.$watch $attrs.tgListitemSeverity, (issue) ->\n render($scope.severityById, issue)\n\n return {\n link: link\n templateUrl: \"common/components/level.html\"\n }\n\nmodule.directive(\"tgListitemSeverity\", ListItemSeverityDirective)\n\n\n#############################################################################\n## Progress bar directive\n#############################################################################\n\nTgProgressBarDirective = ($template) ->\n template = $template.get(\"common/components/progress-bar.html\", true)\n\n render = (el, percentage) ->\n el.html(template({percentage: percentage}))\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$watch $attrs.tgProgressBar, (percentage) ->\n percentage = _.max([0 , percentage])\n percentage = _.min([100, percentage])\n render($el, percentage)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgProgressBar\", [\"$tgTemplate\", TgProgressBarDirective])\n\n\n#############################################################################\n## Main title directive\n#############################################################################\n\nTgMainTitleDirective = ($translate) ->\n link = ($scope, $el, $attrs) ->\n $attrs.$observe \"i18nSectionName\", (i18nSectionName) ->\n $scope.sectionName = $translate.instant(i18nSectionName)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n templateUrl: \"common/components/main-title.html\"\n scope: {\n projectName : \"=projectName\"\n }\n }\n\nmodule.directive(\"tgMainTitle\", [\"$translate\", TgMainTitleDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/confirm.coffee\n###\n\ntaiga = @.taiga\ntimeout = @.taiga.timeout\ncancelTimeout = @.taiga.cancelTimeout\ndebounce = @.taiga.debounce\nbindMethods = @.taiga.bindMethods\n\nNOTIFICATION_MSG = {\n \"success\":\n title: \"NOTIFICATION.OK\"\n message: \"NOTIFICATION.SAVED\"\n \"error\":\n title: \"NOTIFICATION.WARNING\"\n message: \"NOTIFICATION.WARNING_TEXT\"\n \"light-error\":\n title: \"NOTIFICATION.WARNING\"\n message: \"NOTIFICATION.WARNING_TEXT\"\n}\n\n\nclass ConfirmService extends taiga.Service\n @.$inject = [\"$q\", \"lightboxService\", \"$tgLoading\", \"$translate\"]\n\n constructor: (@q, @lightboxService, @loading, @translate) ->\n bindMethods(@)\n\n hide: (el)->\n if el\n @lightboxService.close(el)\n\n el.off(\".confirm-dialog\")\n\n ask: (title, subtitle, message, lightboxSelector=\".lightbox-generic-ask\") ->\n defered = @q.defer()\n\n el = angular.element(lightboxSelector)\n\n # Render content\n el.find(\"h2.title\").html(title)\n el.find(\"span.subtitle\").html(subtitle)\n el.find(\"span.message\").html(message)\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", debounce 2000, (event) =>\n event.preventDefault()\n target = angular.element(event.currentTarget)\n currentLoading = @loading()\n .target(target)\n .start()\n defered.resolve {\n finish: (ok=true) =>\n currentLoading.finish()\n if ok\n @.hide(el)\n }\n\n el.on \"click.confirm-dialog\", \"a.button-red\", (event) =>\n event.preventDefault()\n defered.reject()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n askOnDelete: (title, message) ->\n return @.ask(title, @translate.instant(\"NOTIFICATION.ASK_DELETE\"), message)\n\n askChoice: (title, subtitle, choices, replacement, warning, lightboxSelector=\".lightbox-ask-choice\") ->\n defered = @q.defer()\n\n el = angular.element(lightboxSelector)\n\n # Render content\n el.find(\".title\").html(title)\n el.find(\".subtitle\").html(subtitle)\n\n if replacement\n el.find(\".replacement\").html(replacement)\n else\n el.find(\".replacement\").remove()\n\n if warning\n el.find(\".warning\").html(warning)\n else\n el.find(\".warning\").remove()\n\n choicesField = el.find(\".choices\")\n choicesField.html('')\n _.each choices, (value, key) ->\n choicesField.append(angular.element(\"\"))\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", debounce 2000, (event) =>\n event.preventDefault()\n target = angular.element(event.currentTarget)\n currentLoading = @loading()\n .target(target)\n .start()\n defered.resolve {\n selected: choicesField.val()\n finish: (ok=true) =>\n currentLoading.finish()\n if ok\n @.hide(el)\n }\n\n el.on \"click.confirm-dialog\", \"a.button-red\", (event) =>\n event.preventDefault()\n defered.reject()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n error: (message) ->\n defered = @q.defer()\n\n el = angular.element(\".lightbox-generic-error\")\n\n # Render content\n el.find(\"h2.title\").html(message)\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n el.on \"click.confirm-dialog\", \"a.close\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n success: (title, message) ->\n defered = @q.defer()\n\n el = angular.element(\".lightbox-generic-success\")\n\n # Render content\n el.find(\"h2.title\").html(title) if title\n el.find(\"p.message\").html(message) if message\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n el.on \"click.confirm-dialog\", \"a.close\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n loader: (title, message) ->\n el = angular.element(\".lightbox-generic-loading\")\n\n # Render content\n el.find(\"h2.title\").html(title) if title\n el.find(\"p.message\").html(message) if message\n\n return {\n start: => @lightboxService.open(el)\n stop: => @lightboxService.close(el)\n update: (status, title, message, percent) =>\n el.find(\"h2.title\").html(title) if title\n el.find(\"p.message\").html(message) if message\n\n if percent\n el.find(\".spin\").addClass(\"hidden\")\n el.find(\".progress-bar-wrapper\").removeClass(\"hidden\")\n el.find(\".progress-bar-wrapper > .bar\").width(percent + '%')\n el.find(\".progress-bar-wrapper > span\").html(percent + '%').css('left', (percent - 9) + '%' )\n else\n el.find(\".spin\").removeClass(\"hidden\")\n el.find(\".progress-bar-wrapper\").addClass(\"hidden\")\n }\n\n notify: (type, message, title, time) ->\n # NOTE: Typesi are: error, success, light-error\n # See partials/components/notification-message.jade)\n # Add default texts to NOTIFICATION_MSG for new notification types\n\n selector = \".notification-message-#{type}\"\n el = angular.element(selector)\n\n return if el.hasClass(\"active\")\n\n if title\n el.find(\"h4\").html(title)\n else\n el.find(\"h4\").html(@translate.instant(NOTIFICATION_MSG[type].title))\n\n if message\n el.find(\"p\").html(message)\n else\n el.find(\"p\").html(@translate.instant(NOTIFICATION_MSG[type].message))\n\n body = angular.element(\"body\")\n body.find(\".notification-message .notification-light\")\n .removeClass('active')\n .addClass('inactive')\n\n body.find(selector)\n .removeClass('inactive')\n .addClass('active')\n\n if @.tsem\n cancelTimeout(@.tsem)\n\n if !time\n time = if type == 'error' or type == 'light-error' then 3500 else 1500\n\n @.tsem = timeout time, =>\n body.find(selector)\n .removeClass('active')\n .addClass('inactive')\n\n delete @.tsem\n\n el.on \"click\", \".icon-delete, .close\", (event) =>\n body.find(selector)\n .removeClass('active')\n .addClass('inactive')\n\n\nmodule = angular.module(\"taigaCommon\")\nmodule.service(\"$tgConfirm\", ConfirmService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/custom-field-values.coffee\n###\n\ntaiga = @.taiga\nbindMethods = @.taiga.bindMethods\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\ngenerateHash = taiga.generateHash\n\nmodule = angular.module(\"taigaCommon\")\n\n# Custom attributes types (see taiga-back/taiga/projects/custom_attributes/choices.py)\nTEXT_TYPE = \"text\"\nMULTILINE_TYPE = \"multiline\"\nDATE_TYPE = \"date\"\n\n\nTYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n },\n {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n },\n {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }\n]\n\n\n\nclass CustomAttributesValuesController extends taiga.Controller\n @.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\"]\n\n constructor: (@scope, @rootscope, @repo, @rs, @confirm, @q) ->\n bindMethods(@)\n @.type = null\n @.objectId = null\n @.projectId = null\n @.customAttributes = []\n @.customAttributesValues = null\n\n initialize: (type, objectId) ->\n @.project = @scope.project\n @.type = type\n @.objectId = objectId\n @.projectId = @scope.projectId\n\n loadCustomAttributesValues: ->\n return @.customAttributesValues if not @.objectId\n return @rs.customAttributesValues[@.type].get(@.objectId).then (customAttributesValues) =>\n @.customAttributes = @.project[\"#{@.type}_custom_attributes\"]\n @.customAttributesValues = customAttributesValues\n return customAttributesValues\n\n getAttributeValue: (attribute) ->\n attributeValue = _.clone(attribute, false)\n attributeValue.value = @.customAttributesValues.attributes_values[attribute.id]\n return attributeValue\n\n updateAttributeValue: (attributeValue) ->\n onSuccess = =>\n @rootscope.$broadcast(\"custom-attributes-values:edit\")\n\n onError = (response) =>\n @confirm.notify(\"error\")\n return @q.reject()\n\n # We need to update the full array so angular understand the model is modified\n attributesValues = _.clone(@.customAttributesValues.attributes_values, true)\n attributesValues[attributeValue.id] = attributeValue.value\n @.customAttributesValues.attributes_values = attributesValues\n @.customAttributesValues.id = @.objectId\n return @repo.save(@.customAttributesValues).then(onSuccess, onError)\n\n\nCustomAttributesValuesDirective = ($templates, $storage) ->\n template = $templates.get(\"custom-attributes/custom-attributes-values.html\", true)\n collapsedHash = (type) ->\n return generateHash([\"custom-attributes-collapsed\", type])\n\n link = ($scope, $el, $attrs, $ctrls) ->\n $ctrl = $ctrls[0]\n $model = $ctrls[1]\n\n bindOnce $scope, $attrs.ngModel, (value) ->\n $ctrl.initialize($attrs.type, value.id)\n $ctrl.loadCustomAttributesValues()\n\n $el.on \"click\", \".custom-fields-header a\", ->\n hash = collapsedHash($attrs.type)\n collapsed = not($storage.get(hash) or false)\n $storage.set(hash, collapsed)\n if collapsed\n $el.find(\".custom-fields-header a\").removeClass(\"open\")\n $el.find(\".custom-fields-body\").removeClass(\"open\")\n else\n $el.find(\".custom-fields-header a\").addClass(\"open\")\n $el.find(\".custom-fields-body\").addClass(\"open\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n templateFn = ($el, $attrs) ->\n collapsed = $storage.get(collapsedHash($attrs.type)) or false\n\n return template({\n requiredEditionPerm: $attrs.requiredEditionPerm\n collapsed: collapsed\n })\n\n return {\n require: [\"tgCustomAttributesValues\", \"ngModel\"]\n controller: CustomAttributesValuesController\n controllerAs: \"ctrl\"\n restrict: \"AE\"\n scope: true\n link: link\n template: templateFn\n }\n\nmodule.directive(\"tgCustomAttributesValues\", [\"$tgTemplate\", \"$tgStorage\", \"$translate\",\n CustomAttributesValuesDirective])\n\n\nCustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, datePickerConfigService) ->\n template = $template.get(\"custom-attributes/custom-attribute-value.html\", true)\n templateEdit = $template.get(\"custom-attributes/custom-attribute-value-edit.html\", true)\n\n link = ($scope, $el, $attrs, $ctrl) ->\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n\n render = (attributeValue, edit=false) ->\n if attributeValue.type is DATE_TYPE and attributeValue.value\n value = moment(attributeValue.value, \"YYYY-MM-DD\").format(prettyDate)\n else\n value = attributeValue.value\n editable = isEditable()\n\n ctx = {\n id: attributeValue.id\n name: attributeValue.name\n description: attributeValue.description\n value: value\n isEditable: editable\n type: attributeValue.type\n }\n\n if editable and (edit or not value)\n html = templateEdit(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n if attributeValue.type == DATE_TYPE\n datePickerConfig = datePickerConfigService.get()\n _.merge(datePickerConfig, {\n field: $el.find(\"input[name=value]\")[0]\n onSelect: (date) =>\n selectedDate = date\n onOpen: =>\n $el.picker.setDate(selectedDate) if selectedDate?\n })\n $el.picker = new Pikaday(datePickerConfig)\n else\n html = template(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n isEditable = ->\n permissions = $scope.project.my_permissions\n requiredEditionPerm = $attrs.requiredEditionPerm\n return permissions.indexOf(requiredEditionPerm) > -1\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n attributeValue.value = $el.find(\"input[name=value], textarea[name='value']\").val()\n if attributeValue.type is DATE_TYPE\n if moment(attributeValue.value, prettyDate).isValid()\n attributeValue.value = moment(attributeValue.value, prettyDate).format(\"YYYY-MM-DD\")\n else\n attributeValue.value = \"\"\n\n $scope.$apply ->\n $ctrl.updateAttributeValue(attributeValue).then ->\n render(attributeValue, false)\n\n setFocusAndSelectOnInputField = ->\n $el.find(\"input[name='value'], textarea[name='value']\").focus().select()\n\n # Bootstrap\n attributeValue = $scope.$eval($attrs.tgCustomAttributeValue)\n render(attributeValue)\n\n ## Actions (on view mode)\n $el.on \"click\", \".js-value-view-mode\", ->\n return if not isEditable()\n return if $selectedText.get().length\n render(attributeValue, true)\n setFocusAndSelectOnInputField()\n\n $el.on \"click\", \"a.icon-edit\", (event) ->\n event.preventDefault()\n render(attributeValue, true)\n setFocusAndSelectOnInputField()\n\n ## Actions (on edit mode)\n $el.on \"keyup\", \"input[name=value], textarea[name='value']\", (event) ->\n if event.keyCode is 13 and event.currentTarget.type isnt \"textarea\"\n submit(event)\n else if event.keyCode == 27\n render(attributeValue, false)\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \"a.icon-floppy\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n require: \"^tgCustomAttributesValues\"\n restrict: \"AE\"\n }\n\nmodule.directive(\"tgCustomAttributeValue\", [\"$tgTemplate\", \"$selectedText\", \"$compile\", \"$translate\",\n \"tgDatePickerConfigService\", CustomAttributeValueDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/estimation.coffee\n###\n\ntaiga = @.taiga\ngroupBy = @.taiga.groupBy\n\nmodule = angular.module(\"taigaCommon\")\n\n#############################################################################\n## User story estimation directive (for Lightboxes)\n#############################################################################\n\nLbUsEstimationDirective = ($tgEstimationsService, $rootScope, $repo, $confirm, $template, $compile) ->\n # Display the points of a US and you can edit it.\n #\n # Example:\n # tg-lb-us-estimation-progress-bar(ng-model=\"us\")\n #\n # Requirements:\n # - Us object (ng-model)\n # - scope.project object\n\n link = ($scope, $el, $attrs, $model) ->\n $scope.$watch $attrs.ngModel, (us) ->\n if us\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project)\n estimationProcess.onSelectedPointForRole = (roleId, pointId) ->\n $scope.$apply ->\n $model.$setViewValue(us)\n\n\n estimationProcess.render = () ->\n ctx = {\n totalPoints: @calculateTotalPoints()\n roles: @calculateRoles()\n editable: @isEditable\n }\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\"\n template = $template.get(mainTemplate, true)\n html = template(ctx)\n html = $compile(html)($scope)\n @$el.html(html)\n\n estimationProcess.render()\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgLbUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgTemplate\", \"$compile\", LbUsEstimationDirective])\n\n\n#############################################################################\n## User story estimation directive\n#############################################################################\n\nUsEstimationDirective = ($tgEstimationsService, $rootScope, $repo, $confirm, $qqueue, $template, $compile) ->\n # Display the points of a US and you can edit it.\n #\n # Example:\n # tg-us-estimation-progress-bar(ng-model=\"us\")\n #\n # Requirements:\n # - Us object (ng-model)\n # - scope.project object\n\n link = ($scope, $el, $attrs, $model) ->\n $scope.$watch $attrs.ngModel, (us) ->\n if us\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project)\n estimationProcess.onSelectedPointForRole = (roleId, pointId) ->\n @save(roleId, pointId).then ->\n $rootScope.$broadcast(\"object:updated\")\n\n estimationProcess.render = () ->\n ctx = {\n totalPoints: @calculateTotalPoints()\n roles: @calculateRoles()\n editable: @isEditable\n }\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\"\n template = $template.get(mainTemplate, true)\n html = template(ctx)\n html = $compile(html)($scope)\n @$el.html(html)\n\n estimationProcess.render()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\"\n UsEstimationDirective])\n\n\n#############################################################################\n## Estimations service\n#############################################################################\n\nEstimationsService = ($template, $qqueue, $repo, $confirm, $q) ->\n pointsTemplate = $template.get(\"common/estimation/us-estimation-points.html\", true)\n\n class EstimationProcess\n constructor: (@$el, @us, @project) ->\n @isEditable = @project.my_permissions.indexOf(\"modify_us\") != -1\n @roles = @project.roles\n @points = @project.points\n @pointsById = groupBy(@points, (x) -> x.id)\n @onSelectedPointForRole = (roleId, pointId) ->\n @render = () ->\n\n save: (roleId, pointId) ->\n deferred = $q.defer()\n $qqueue.add () =>\n onSuccess = =>\n deferred.resolve()\n $confirm.notify(\"success\")\n\n onError = =>\n $confirm.notify(\"error\")\n @us.revert()\n @render()\n deferred.reject()\n\n $repo.save(@us).then(onSuccess, onError)\n\n return deferred.promise\n\n calculateTotalPoints: () ->\n values = _.map(@us.points, (v, k) => @pointsById[v]?.value)\n\n if values.length == 0\n return \"0\"\n\n notNullValues = _.filter(values, (v) -> v?)\n if notNullValues.length == 0\n return \"?\"\n\n return _.reduce(notNullValues, (acc, num) -> acc + num)\n\n calculateRoles: () ->\n computableRoles = _.filter(@project.roles, \"computable\")\n roles = _.map computableRoles, (role) =>\n pointId = @us.points[role.id]\n pointObj = @pointsById[pointId]\n role = _.clone(role, true)\n role.points = if pointObj? and pointObj.name? then pointObj.name else \"?\"\n return role\n\n return roles\n\n bindClickEvents: =>\n @$el.on \"click\", \".total.clickable\", (event) =>\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n roleId = target.data(\"role-id\")\n @renderPointsSelector(roleId, target)\n target.siblings().removeClass('active')\n target.addClass('active')\n\n @$el.on \"click\", \".point\", (event) =>\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n roleId = target.data(\"role-id\")\n pointId = target.data(\"point-id\")\n @$el.find(\".popover\").popover().close()\n points = _.clone(@us.points, true)\n points[roleId] = pointId\n @us.points = points\n @render()\n @onSelectedPointForRole(roleId, pointId)\n\n renderPointsSelector: (roleId, target) ->\n points = _.map @points, (point) =>\n point = _.clone(point, true)\n point.selected = if @us.points[roleId] == point.id then false else true\n return point\n\n maxPointLength = 5\n horizontalList = _.some points, (point) => point.name.length > maxPointLength\n\n html = pointsTemplate({\"points\": points, roleId: roleId, horizontal: horizontalList})\n # Remove any previous state\n @$el.find(\".popover\").popover().close()\n @$el.find(\".pop-points-open\").remove()\n # Render into DOM and show the new created element\n if target?\n @$el.find(target).append(html)\n else\n @$el.append(html)\n\n @$el.find(\".pop-points-open\").popover().open ->\n $(this)\n .removeClass(\"active\")\n .closest(\"li\").removeClass(\"active\")\n\n @$el.find(\".pop-points-open\").show()\n\n pop = @$el.find(\".pop-points-open\")\n if pop.offset().top + pop.height() > document.body.clientHeight\n pop.addClass('pop-bottom')\n\n create = ($el, us, project) ->\n $el.unbind(\"click\")\n\n estimationProcess = new EstimationProcess($el, us, project)\n\n if estimationProcess.isEditable\n estimationProcess.bindClickEvents()\n\n return estimationProcess\n\n return {\n create: create\n }\n\nmodule.factory(\"$tgEstimationsService\", [\"$tgTemplate\", \"$tgQqueue\", \"$tgRepo\", \"$tgConfirm\", \"$q\", EstimationsService])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/filters.coffee\n###\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaCommon\")\n\n\ndefaultFilter = ->\n return (value, defaultValue) ->\n if value is [null, undefined]\n return defaultValue\n return value\n\nmodule.filter(\"default\", defaultFilter)\n\n\nyesNoFilter = ($translate) ->\n return (value) ->\n if value\n return $translate.instant(\"COMMON.YES\")\n\n return $translate.instant(\"COMMON.NO\")\n\nmodule.filter(\"yesNo\", [\"$translate\", yesNoFilter])\n\n\nunslugify = ->\n return taiga.unslugify\n\nmodule.filter(\"unslugify\", unslugify)\n\n\nmomentFormat = ->\n return (input, format) ->\n if input\n return moment(input).format(format)\n return \"\"\n\nmodule.filter(\"momentFormat\", momentFormat)\n\n\nmomentFromNow = ->\n return (input, without_suffix) ->\n if input\n return moment(input).fromNow(without_suffix or false)\n return \"\"\n\nmodule.filter(\"momentFromNow\", momentFromNow)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/history.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaCommon\")\n\nIGNORED_FIELDS = {\n \"userstories.userstory\": [\n \"watchers\", \"kanban_order\", \"backlog_order\", \"sprint_order\", \"finish_date\"\n ]\n \"tasks.task\": [\n \"watchers\", \"us_order\", \"taskboard_order\"\n ]\n}\n\n#############################################################################\n## History Directive (Main)\n#############################################################################\n\n\nclass HistoryController extends taiga.Controller\n @.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\"]\n\n constructor: (@scope, @repo, @rs) ->\n\n initialize: (type, objectId) ->\n @.type = type\n @.objectId = objectId\n\n loadHistory: (type, objectId) ->\n return @rs.history.get(type, objectId).then (history) =>\n for historyResult in history\n # If description was modified take only the description_html field\n if historyResult.values_diff.description_diff?\n historyResult.values_diff.description = historyResult.values_diff.description_diff\n\n delete historyResult.values_diff.description_html\n delete historyResult.values_diff.description_diff\n\n # If block note was modified take only the blocked_note_html field\n if historyResult.values_diff.blocked_note_diff?\n historyResult.values_diff.blocked_note = historyResult.values_diff.blocked_note_diff\n\n delete historyResult.values_diff.blocked_note_html\n delete historyResult.values_diff.blocked_note_diff\n\n @scope.history = history\n @scope.comments = _.filter(history, (item) -> item.comment != \"\")\n\n deleteComment: (type, objectId, activityId) ->\n return @rs.history.deleteComment(type, objectId, activityId).then => @.loadHistory(type, objectId)\n\n undeleteComment: (type, objectId, activityId) ->\n return @rs.history.undeleteComment(type, objectId, activityId).then => @.loadHistory(type, objectId)\n\n\nHistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $compile, $navUrls, $rootScope) ->\n templateChangeDiff = $template.get(\"common/history/history-change-diff.html\", true)\n templateChangePoints = $template.get(\"common/history/history-change-points.html\", true)\n templateChangeGeneric = $template.get(\"common/history/history-change-generic.html\", true)\n templateChangeAttachment = $template.get(\"common/history/history-change-attachment.html\", true)\n templateChangeList = $template.get(\"common/history/history-change-list.html\", true)\n templateDeletedComment = $template.get(\"common/history/history-deleted-comment.html\", true)\n templateActivity = $template.get(\"common/history/history-activity.html\", true)\n templateBaseEntries = $template.get(\"common/history/history-base-entries.html\", true)\n templateBase = $template.get(\"common/history/history-base.html\", true)\n\n link = ($scope, $el, $attrs, $ctrl) ->\n # Bootstraping\n type = $attrs.type\n objectId = null\n\n showAllComments = false\n showAllActivity = false\n\n getPrettyDateFormat = ->\n return $translate.instant(\"ACTIVITY.DATETIME\")\n\n bindOnce $scope, $attrs.ngModel, (model) ->\n type = $attrs.type\n objectId = model.id\n\n $ctrl.initialize(type, objectId)\n $ctrl.loadHistory(type, objectId)\n\n # Helpers\n getHumanizedFieldName = (field) ->\n humanizedFieldNames = {\n subject : $translate.instant(\"ACTIVITY.FIELDS.SUBJECT\")\n name: $translate.instant(\"ACTIVITY.FIELDS.NAME\")\n description : $translate.instant(\"ACTIVITY.FIELDS.DESCRIPTION\")\n content: $translate.instant(\"ACTIVITY.FIELDS.CONTENT\")\n status: $translate.instant(\"ACTIVITY.FIELDS.STATUS\")\n is_closed : $translate.instant(\"ACTIVITY.FIELDS.IS_CLOSED\")\n finish_date : $translate.instant(\"ACTIVITY.FIELDS.FINISH_DATE\")\n type: $translate.instant(\"ACTIVITY.FIELDS.TYPE\")\n priority: $translate.instant(\"ACTIVITY.FIELDS.PRIORITY\")\n severity: $translate.instant(\"ACTIVITY.FIELDS.SEVERITY\")\n assigned_to : $translate.instant(\"ACTIVITY.FIELDS.ASSIGNED_TO\")\n watchers : $translate.instant(\"ACTIVITY.FIELDS.WATCHERS\")\n milestone : $translate.instant(\"ACTIVITY.FIELDS.MILESTONE\")\n user_story: $translate.instant(\"ACTIVITY.FIELDS.USER_STORY\")\n project: $translate.instant(\"ACTIVITY.FIELDS.PROJECT\")\n is_blocked: $translate.instant(\"ACTIVITY.FIELDS.IS_BLOCKED\")\n blocked_note: $translate.instant(\"ACTIVITY.FIELDS.BLOCKED_NOTE\")\n points: $translate.instant(\"ACTIVITY.FIELDS.POINTS\")\n client_requirement : $translate.instant(\"ACTIVITY.FIELDS.CLIENT_REQUIREMENT\")\n team_requirement : $translate.instant(\"ACTIVITY.FIELDS.TEAM_REQUIREMENT\")\n is_iocaine: $translate.instant(\"ACTIVITY.FIELDS.IS_IOCAINE\")\n tags: $translate.instant(\"ACTIVITY.FIELDS.TAGS\")\n attachments : $translate.instant(\"ACTIVITY.FIELDS.ATTACHMENTS\")\n is_deprecated: $translate.instant(\"ACTIVITY.FIELDS.IS_DEPRECATED\")\n blocked_note: $translate.instant(\"ACTIVITY.FIELDS.BLOCKED_NOTE\")\n is_blocked: $translate.instant(\"ACTIVITY.FIELDS.IS_BLOCKED\")\n order: $translate.instant(\"ACTIVITY.FIELDS.ORDER\")\n backlog_order: $translate.instant(\"ACTIVITY.FIELDS.BACKLOG_ORDER\")\n sprint_order: $translate.instant(\"ACTIVITY.FIELDS.SPRINT_ORDER\")\n kanban_order: $translate.instant(\"ACTIVITY.FIELDS.KANBAN_ORDER\")\n taskboard_order: $translate.instant(\"ACTIVITY.FIELDS.TASKBOARD_ORDER\")\n us_order: $translate.instant(\"ACTIVITY.FIELDS.US_ORDER\")\n }\n\n return humanizedFieldNames[field] or field\n\n countChanges = (comment) ->\n return _.keys(comment.values_diff).length\n\n formatChange = (change) ->\n if _.isArray(change)\n if change.length == 0\n return $translate.instant(\"ACTIVITY.VALUES.EMPTY\")\n return change.join(\", \")\n\n if change == \"\"\n return $translate.instant(\"ACTIVITY.VALUES.EMPTY\")\n\n if not change? or change == false\n return $translate.instant(\"ACTIVITY.VALUES.NO\")\n\n if change == true\n return $translate.instant(\"ACTIVITY.VALUES.YES\")\n\n return change\n\n # Render into string (operations without mutability)\n\n renderAttachmentEntry = (value) ->\n attachments = _.map value, (changes, type) ->\n if type == \"new\"\n return _.map changes, (change) ->\n return templateChangeDiff({\n name: $translate.instant(\"ACTIVITY.NEW_ATTACHMENT\"),\n diff: change.filename\n })\n else if type == \"deleted\"\n return _.map changes, (change) ->\n return templateChangeDiff({\n name: $translate.instant(\"ACTIVITY.DELETED_ATTACHMENT\"),\n diff: change.filename\n })\n else\n return _.map changes, (change) ->\n name = $translate.instant(\"ACTIVITY.UPDATED_ATTACHMENT\", {filename: change.filename})\n\n diff = _.map change.changes, (values, name) ->\n return {\n name: getHumanizedFieldName(name)\n from: formatChange(values[0])\n to: formatChange(values[1])\n }\n\n return templateChangeAttachment({name: name, diff: diff})\n\n return _.flatten(attachments).join(\"\\n\")\n\n renderCustomAttributesEntry = (value) ->\n customAttributes = _.map value, (changes, type) ->\n if type == \"new\"\n return _.map changes, (change) ->\n html = templateChangeGeneric({\n name: change.name,\n from: formatChange(\"\"),\n to: formatChange(change.value)\n })\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n else if type == \"deleted\"\n return _.map changes, (change) ->\n return templateChangeDiff({\n name: $translate.instant(\"ACTIVITY.DELETED_CUSTOM_ATTRIBUTE\")\n diff: change.name\n })\n else\n return _.map changes, (change) ->\n customAttrsChanges = _.map change.changes, (values) ->\n return templateChangeGeneric({\n name: change.name\n from: formatChange(values[0])\n to: formatChange(values[1])\n })\n return _.flatten(customAttrsChanges).join(\"\\n\")\n\n return _.flatten(customAttributes).join(\"\\n\")\n\n renderChangeEntry = (field, value) ->\n if field == \"description\"\n return templateChangeDiff({name: getHumanizedFieldName(\"description\"), diff: value[1]})\n else if field == \"blocked_note\"\n return templateChangeDiff({name: getHumanizedFieldName(\"blocked_note\"), diff: value[1]})\n else if field == \"points\"\n html = templateChangePoints({points: value})\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n else if field == \"attachments\"\n return renderAttachmentEntry(value)\n else if field == \"custom_attributes\"\n return renderCustomAttributesEntry(value)\n else if field in [\"tags\", \"watchers\"]\n name = getHumanizedFieldName(field)\n removed = _.difference(value[0], value[1])\n added = _.difference(value[1], value[0])\n html = templateChangeList({name:name, removed:removed, added: added})\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n else if field == \"assigned_to\"\n name = getHumanizedFieldName(field)\n from = formatChange(value[0] or $translate.instant(\"ACTIVITY.VALUES.UNASSIGNED\"))\n to = formatChange(value[1] or $translate.instant(\"ACTIVITY.VALUES.UNASSIGNED\"))\n return templateChangeGeneric({name:name, from:from, to: to})\n else\n name = getHumanizedFieldName(field)\n from = formatChange(value[0])\n to = formatChange(value[1])\n return templateChangeGeneric({name:name, from:from, to: to})\n\n renderChangeEntries = (change) ->\n changeModel = change.key.split(\":\")[0]\n if IGNORED_FIELDS[changeModel]?\n change.values_diff = _.removeKeys(change.values_diff, IGNORED_FIELDS[changeModel])\n\n return _.map(change.values_diff, (value, field) -> renderChangeEntry(field, value))\n\n renderChangesHelperText = (change) ->\n size = countChanges(change)\n return $translate.instant(\"ACTIVITY.SIZE_CHANGE\", {size: size}, 'messageformat')\n\n renderComment = (comment) ->\n if (comment.delete_comment_date or comment.delete_comment_user?.name)\n html = templateDeletedComment({\n deleteCommentDate: moment(comment.delete_comment_date).format(getPrettyDateFormat()) if comment.delete_comment_date\n deleteCommentUser: comment.delete_comment_user.name\n deleteComment: comment.comment_html\n activityId: comment.id\n canRestoreComment: ($scope.user and\n (comment.delete_comment_user.pk == $scope.user.id or\n $scope.project.my_permissions.indexOf(\"modify_project\") > -1))\n })\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n\n html = templateActivity({\n avatar: comment.user.photo\n userFullName: comment.user.name\n userProfileUrl: if comment.user.is_active then $navUrls.resolve(\"user-profile\", {username: comment.user.username}) else \"\"\n creationDate: moment(comment.created_at).format(getPrettyDateFormat())\n comment: comment.comment_html\n changesText: renderChangesHelperText(comment)\n changes: renderChangeEntries(comment)\n mode: \"comment\"\n deleteCommentDate: moment(comment.delete_comment_date).format(getPrettyDateFormat()) if comment.delete_comment_date\n deleteCommentUser: comment.delete_comment_user.name if comment.delete_comment_user?.name\n activityId: comment.id\n canDeleteComment: comment.user.pk == $scope.user?.id or $scope.project.my_permissions.indexOf(\"modify_project\") > -1\n })\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n\n renderChange = (change) ->\n return templateActivity({\n avatar: change.user.photo\n userFullName: change.user.name\n userProfileUrl: if change.user.is_active then $navUrls.resolve(\"user-profile\", {username: change.user.username}) else \"\"\n creationDate: moment(change.created_at).format(getPrettyDateFormat())\n comment: change.comment_html\n changes: renderChangeEntries(change)\n changesText: \"\"\n mode: \"activity\"\n deleteCommentDate: moment(change.delete_comment_date).format(getPrettyDateFormat()) if change.delete_comment_date\n deleteCommentUser: change.delete_comment_user.name if change.delete_comment_user?.name\n activityId: change.id\n })\n\n renderHistory = (entries, totalEntries) ->\n if entries.length == totalEntries\n showMore = 0\n else\n showMore = totalEntries - entries.length\n\n html = templateBaseEntries({entries: entries, showMore:showMore})\n html = $compile(html)($scope)\n return html\n\n # Render into DOM (operations with dom mutability)\n\n renderComments = ->\n comments = $scope.comments or []\n totalComments = comments.length\n if not showAllComments\n comments = _.last(comments, 4)\n\n comments = _.map(comments, (x) -> renderComment(x))\n html = renderHistory(comments, totalComments)\n $el.find(\".comments-list\").html(html)\n\n renderActivity = ->\n changes = $scope.history or []\n totalChanges = changes.length\n if not showAllActivity\n changes = _.last(changes, 4)\n\n changes = _.map(changes, (x) -> renderChange(x))\n html = renderHistory(changes, totalChanges)\n $el.find(\".changes-list\").html(html)\n\n save = $qqueue.bindAdd (target) =>\n $scope.$broadcast(\"markdown-editor:submit\")\n\n $el.find(\".comment-list\").addClass(\"activeanimation\")\n\n currentLoading = $loading()\n .target(target)\n .start()\n\n onSuccess = ->\n $rootScope.$broadcast(\"comment:new\")\n\n $ctrl.loadHistory(type, objectId).finally ->\n currentLoading.finish()\n\n onError = ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n model = $scope.$eval($attrs.ngModel)\n\n $ctrl.repo.save(model).then(onSuccess, onError)\n\n # Watchers\n\n $scope.$watch(\"comments\", renderComments)\n $scope.$watch(\"history\", renderActivity)\n\n $scope.$on(\"object:updated\", -> $ctrl.loadHistory(type, objectId))\n\n # Events\n\n $el.on \"click\", \".add-comment button.button-green\", debounce 2000, (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n save(target)\n\n $el.on \"click\", \"a\", (event) ->\n target = angular.element(event.target)\n href = target.attr('href')\n if href && href.indexOf(\"#\") == 0\n event.preventDefault()\n $('body').scrollTop($(href).offset().top)\n\n $el.on \"click\", \".show-more\", (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n if target.parent().is(\".changes-list\")\n showAllActivity = not showAllActivity\n renderActivity()\n else\n showAllComments = not showAllComments\n renderComments()\n\n $el.on \"click\", \".show-deleted-comment\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.parents('.activity-single').find('.hide-deleted-comment').show()\n target.parents('.activity-single').find('.show-deleted-comment').hide()\n target.parents('.activity-single').find('.comment-body').show()\n\n $el.on \"click\", \".hide-deleted-comment\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.parents('.activity-single').find('.hide-deleted-comment').hide()\n target.parents('.activity-single').find('.show-deleted-comment').show()\n target.parents('.activity-single').find('.comment-body').hide()\n\n $el.on \"click\", \".changes-title\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.parent().find(\".change-entry\").toggleClass(\"active\")\n\n $el.on \"focus\", \".add-comment textarea\", (event) ->\n $(this).addClass('active')\n\n $el.on \"click\", \".history-tabs li a\", (event) ->\n target = angular.element(event.currentTarget)\n\n $el.find(\".history-tabs li a\").removeClass(\"active\")\n target.addClass(\"active\")\n\n $el.find(\".history section\").addClass(\"hidden\")\n $el.find(\".history section.#{target.data('section-class')}\").removeClass(\"hidden\")\n\n $el.on \"click\", \".comment-delete\", debounce 2000, (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n activityId = target.data('activity-id')\n $ctrl.deleteComment(type, objectId, activityId)\n\n $el.on \"click\", \".comment-restore\", debounce 2000, (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n activityId = target.data('activity-id')\n $ctrl.undeleteComment(type, objectId, activityId)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n templateFn = ($el, $attrs) ->\n html = templateBase({ngmodel: $attrs.ngModel, type: $attrs.type, mode: $attrs.mode})\n\n return html\n\n return {\n controller: HistoryController\n template: templateFn\n restrict: \"AE\"\n link: link\n # require: [\"ngModel\", \"tgHistory\"]\n }\n\n\nmodule.directive(\"tgHistory\", [\"$log\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$tgConfirm\", \"$translate\",\n \"$compile\", \"$tgNavUrls\", \"$rootScope\", HistoryDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/importer.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\n\nImportProjectButtonDirective = ($rs, $confirm, $location, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $el.on \"click\", \".import-project-button\", (event) ->\n event.preventDefault()\n $el.find(\"input.import-file\").val(\"\")\n $el.find(\"input.import-file\").trigger(\"click\")\n\n $el.on \"change\", \"input.import-file\", (event) ->\n event.preventDefault()\n file = event.target.files[0]\n return if not file\n\n loader = $confirm.loader($translate.instant(\"PROJECT.IMPORT.UPLOADING_FILE\"))\n\n onSuccess = (result) ->\n loader.stop()\n if result.status == 202 # Async mode\n title = $translate.instant(\"PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE\")\n message = $translate.instant(\"PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE\")\n $confirm.success(title, message)\n\n else # result.status == 201 # Sync mode\n ctx = {project: result.data.slug}\n $location.path($navUrls.resolve(\"project-admin-project-profile-details\", ctx))\n msg = $translate.instant(\"PROJECT.IMPORT.SYNC_SUCCESS\")\n $confirm.notify(\"success\", msg)\n\n onError = (result) ->\n loader.stop()\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR\")\n\n if result.status == 429 # TOO MANY REQUESTS\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST\")\n else if result.data?._error_message\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_MESSAGE\", {error_message: result.data._error_message})\n $confirm.notify(\"error\", errorMsg)\n\n loader.start()\n $rs.projects.import(file, loader.update).then(onSuccess, onError)\n\n return {link: link}\n\nmodule.directive(\"tgImportProjectButton\", [\"$tgResources\", \"$tgConfirm\", \"$location\", \"$tgNavUrls\", \"$translate\",\n ImportProjectButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/lightboxes.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\nbindOnce = @.taiga.bindOnce\ntimeout = @.taiga.timeout\ndebounce = @.taiga.debounce\n\n#############################################################################\n## Common Lightbox Services\n#############################################################################\n\n# the lightboxContent hide/show doesn't have sense because is an IE hack\nclass LightboxService extends taiga.Service\n constructor: (@animationFrame, @q) ->\n\n open: ($el) ->\n defered = @q.defer()\n\n lightboxContent = $el.children().not(\".close\")\n lightboxContent.hide()\n\n @animationFrame.add ->\n $el.css('display', 'flex')\n\n @animationFrame.add ->\n $el.addClass(\"open\")\n\n @animationFrame.add ->\n $el.find('input,textarea').first().focus()\n\n @animationFrame.add =>\n lightboxContent.show()\n defered.resolve()\n\n docEl = angular.element(document)\n docEl.on \"keydown.lightbox\", (e) =>\n code = if e.keyCode then e.keyCode else e.which\n @.close($el) if code == 27\n\n return defered.promise\n\n close: ($el) ->\n docEl = angular.element(document)\n docEl.off(\".lightbox\")\n docEl.off(\".keyboard-navigation\") # Hack: to fix problems in the WYSIWYG textareas when press ENTER\n $el.one \"transitionend\", =>\n $el.removeAttr('style')\n $el.removeClass(\"open\").removeClass('close')\n\n $el.addClass('close')\n\n if $el.hasClass(\"remove-on-close\")\n scope = $el.data(\"scope\")\n scope.$destroy()\n $el.remove()\n\n closeAll: ->\n docEl = angular.element(document)\n for lightboxEl in docEl.find(\".lightbox.open\")\n @.close($(lightboxEl))\n\n\nmodule.service(\"lightboxService\", [\"animationFrame\", \"$q\", LightboxService])\n\n\nclass LightboxKeyboardNavigationService extends taiga.Service\n stop: ->\n docEl = angular.element(document)\n docEl.off(\".keyboard-navigation\")\n\n dispatch: ($el, code) ->\n activeElement = $el.find(\".active\")\n\n # Key: enter\n if code == 13\n if $el.find(\".watcher-single\").length == 1\n $el.find('.watcher-single:first').trigger(\"click\")\n else\n activeElement.trigger(\"click\")\n\n # Key: down\n else if code == 40\n if not activeElement.length\n $el.find('.watcher-single:first').addClass('active')\n else\n next = activeElement.next('.watcher-single')\n if next.length\n activeElement.removeClass('active')\n next.addClass('active')\n # Key: up\n else if code == 38\n if not activeElement.length\n $el.find('.watcher-single:last').addClass('active')\n else\n prev = activeElement.prev('.watcher-single')\n\n if prev.length\n activeElement.removeClass('active')\n prev.addClass('active')\n\n init: ($el) ->\n @stop()\n docEl = angular.element(document)\n docEl.on \"keydown.keyboard-navigation\", (event) =>\n code = if event.keyCode then event.keyCode else event.which\n if code == 40 || code == 38 || code == 13\n event.preventDefault()\n @.dispatch($el, code)\n\nmodule.service(\"lightboxKeyboardNavigationService\", LightboxKeyboardNavigationService)\n\n\n#############################################################################\n## Generic Lighthbox Directive\n#############################################################################\n\n# This adds generic behavior to all blocks with lightbox class like\n# close button event handlers.\n\nLightboxDirective = (lightboxService) ->\n link = ($scope, $el, $attrs) ->\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n return {restrict: \"C\", link: link}\n\nmodule.directive(\"lightbox\", [\"lightboxService\", LightboxDirective])\n\n#############################################################################\n## Block Lightbox Directive\n#############################################################################\n\n# Issue/Userstory blocking message lightbox directive.\n\nBlockLightboxDirective = ($rootscope, $tgrepo, $confirm, lightboxService, $loading, $qqueue, $translate) ->\n link = ($scope, $el, $attrs, $model) ->\n title = $translate.instant($attrs.title)\n $el.find(\"h2.title\").text(title)\n\n unblock = $qqueue.bindAdd (item, finishCallback) =>\n promise = $tgrepo.save(item)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n $model.$setViewValue(item)\n finishCallback()\n\n promise.then null, ->\n $confirm.notify(\"error\")\n item.revert()\n $model.$setViewValue(item)\n\n promise.finally ->\n finishCallback()\n\n return promise\n\n block = $qqueue.bindAdd (item) =>\n $model.$setViewValue(item)\n\n currentLoading = $loading()\n .target($el.find(\".button-green\"))\n .start()\n\n promise = $tgrepo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $confirm.notify(\"error\")\n item.revert()\n $model.$setViewValue(item)\n\n promise.finally ->\n currentLoading.finish()\n lightboxService.close($el)\n\n $scope.$on \"block\", ->\n $el.find(\".reason\").val($model.$modelValue.blocked_note)\n lightboxService.open($el)\n\n $scope.$on \"unblock\", (event, model, finishCallback) =>\n item = $model.$modelValue.clone()\n item.is_blocked = false\n item.blocked_note = \"\"\n\n unblock(item, finishCallback)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $el.on \"click\", \".button-green\", (event) ->\n event.preventDefault()\n\n item = $model.$modelValue.clone()\n item.is_blocked = true\n item.blocked_note = $el.find(\".reason\").val()\n\n block(item)\n\n return {\n templateUrl: \"common/lightbox/lightbox-block.html\"\n link: link\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgLbBlock\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"lightboxService\", \"$tgLoading\", \"$tgQqueue\", \"$translate\", BlockLightboxDirective])\n\n\n#############################################################################\n## Generic Lightbox Blocking-Message Input Directive\n#############################################################################\n\nBlockingMessageInputDirective = ($log, $template, $compile) ->\n template = $template.get(\"common/lightbox/lightbox-blocking-message-input.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n if not $attrs.watch\n return $log.error \"No watch attribute on tg-blocking-message-input directive\"\n\n $scope.$watch $attrs.watch, (value) ->\n if value is not undefined and value == true\n $el.find(\".blocked-note\").removeClass(\"hidden\")\n else\n $el.find(\".blocked-note\").addClass(\"hidden\")\n\n templateFn = ($el, $attrs) ->\n return template({ngmodel: $attrs.ngModel})\n\n return {\n template: templateFn\n link: link\n require: \"ngModel\"\n restrict: \"EA\"\n }\n\nmodule.directive(\"tgBlockingMessageInput\", [\"$log\", \"$tgTemplate\", \"$compile\", BlockingMessageInputDirective])\n\n\n#############################################################################\n## Create/Edit Userstory Lightbox Directive\n#############################################################################\n\nCreateEditUserstoryDirective = ($repo, $model, $rs, $rootScope, lightboxService, $loading, $translate) ->\n link = ($scope, $el, attrs) ->\n $scope.isNew = true\n\n $scope.$on \"usform:new\", (ctx, projectId, status, statusList) ->\n $scope.isNew = true\n $scope.usStatusList = statusList\n\n $scope.us = $model.make_model(\"userstories\", {\n project: projectId\n points : {}\n status: status\n is_archived: false\n tags: []\n })\n\n # Update texts for creation\n $el.find(\".button-green\").html($translate.instant(\"COMMON.CREATE\"))\n $el.find(\".title\").html($translate.instant(\"LIGHTBOX.CREATE_EDIT_US.NEW_US\"))\n $el.find(\".tag-input\").val(\"\")\n\n $el.find(\".blocked-note\").addClass(\"hidden\")\n $el.find(\"label.blocked\").removeClass(\"selected\")\n $el.find(\"label.team-requirement\").removeClass(\"selected\")\n $el.find(\"label.client-requirement\").removeClass(\"selected\")\n\n lightboxService.open($el)\n\n $scope.$on \"usform:edit\", (ctx, us) ->\n $scope.us = us\n $scope.isNew = false\n\n # Update texts for edition\n $el.find(\".button-green\").html($translate.instant(\"COMMON.SAVE\"))\n $el.find(\".title\").html($translate.instant(\"LIGHTBOX.CREATE_EDIT_US.EDIT_US\"))\n $el.find(\".tag-input\").val(\"\")\n\n # Update requirement info (team, client or blocked)\n if us.is_blocked\n $el.find(\".blocked-note\").removeClass(\"hidden\")\n $el.find(\"label.blocked\").addClass(\"selected\")\n else\n $el.find(\".blocked-note\").addClass(\"hidden\")\n $el.find(\"label.blocked\").removeClass(\"selected\")\n\n if us.team_requirement\n $el.find(\"label.team-requirement\").addClass(\"selected\")\n else\n $el.find(\"label.team-requirement\").removeClass(\"selected\")\n if us.client_requirement\n $el.find(\"label.client-requirement\").addClass(\"selected\")\n else\n $el.find(\"label.client-requirement\").removeClass(\"selected\")\n\n lightboxService.open($el)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n if $scope.isNew\n promise = $repo.create(\"userstories\", $scope.us)\n broadcastEvent = \"usform:new:success\"\n else\n promise = $repo.save($scope.us)\n broadcastEvent = \"usform:edit:success\"\n\n promise.then (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $rootScope.$broadcast(broadcastEvent, data)\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $scope.us.revert()\n lightboxService.close($el)\n\n $el.keydown (event) ->\n code = if event.keyCode then event.keyCode else event.which\n if code == 27\n lightboxService.close($el)\n $scope.$apply ->\n $scope.us.revert()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateEditUserstory\", [\n \"$tgRepo\",\n \"$tgModel\",\n \"$tgResources\",\n \"$rootScope\",\n \"lightboxService\",\n \"$tgLoading\",\n \"$translate\",\n CreateEditUserstoryDirective\n])\n\n\n#############################################################################\n## Creare Bulk Userstories Lightbox Directive\n#############################################################################\n\nCreateBulkUserstoriesDirective = ($repo, $rs, $rootscope, lightboxService, $loading) ->\n link = ($scope, $el, attrs) ->\n $scope.$on \"usform:bulk\", (ctx, projectId, status) ->\n $scope.new = {\n projectId: projectId\n statusId: status\n bulk: \"\"\n }\n lightboxService.open($el)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley({onlyOneErrorElement: true})\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $rs.userstories.bulkCreate($scope.new.projectId, $scope.new.statusId, $scope.new.bulk)\n promise.then (result) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"usform:bulk:success\", result)\n lightboxService.close($el)\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateBulkUserstories\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n \"lightboxService\",\n \"$tgLoading\",\n CreateBulkUserstoriesDirective\n])\n\n\n#############################################################################\n## AssignedTo Lightbox Directive\n#############################################################################\n\nAssignedToLightboxDirective = (lightboxService, lightboxKeyboardNavigationService, $template, $compile) ->\n link = ($scope, $el, $attrs) ->\n selectedUser = null\n selectedItem = null\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true)\n\n normalizeString = (string) ->\n normalizedString = string\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\")\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\")\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\")\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\")\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\")\n return normalizedString\n\n filterUsers = (text, user) ->\n username = user.full_name_display.toUpperCase()\n username = normalizeString(username)\n text = text.toUpperCase()\n text = normalizeString(text)\n return _.contains(username, text)\n\n render = (selected, text) ->\n users = _.clone($scope.activeUsers, true)\n users = _.reject(users, {\"id\": selected.id}) if selected?\n users = _.filter(users, _.partial(filterUsers, text)) if text?\n\n ctx = {\n selected: selected\n users: _.first(users, 5)\n showMore: users.length > 5\n }\n\n html = usersTemplate(ctx)\n html = $compile(html)($scope)\n\n $el.find(\".assigned-to-list\").html(html)\n\n closeLightbox = () ->\n lightboxKeyboardNavigationService.stop()\n lightboxService.close($el)\n\n $scope.$on \"assigned-to:add\", (ctx, item) ->\n selectedItem = item\n assignedToId = item.assigned_to\n selectedUser = $scope.usersById[assignedToId]\n\n render(selectedUser)\n lightboxService.open($el).then ->\n $el.find('input').focus()\n lightboxKeyboardNavigationService.init($el)\n\n $scope.$watch \"usersSearch\", (searchingText) ->\n if searchingText?\n render(selectedUser, searchingText)\n $el.find('input').focus()\n\n $el.on \"click\", \".user-list-single\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.$broadcast(\"assigned-to:added\", target.data(\"user-id\"), selectedItem)\n $scope.usersSearch = null\n\n $el.on \"click\", \".remove-assigned-to\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.usersSearch = null\n $scope.$broadcast(\"assigned-to:added\", null, selectedItem)\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.usersSearch = null\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n templateUrl: \"common/lightbox/lightbox-assigned-to.html\"\n link:link\n }\n\n\nmodule.directive(\"tgLbAssignedto\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", AssignedToLightboxDirective])\n\n\n#############################################################################\n## Watchers Lightbox directive\n#############################################################################\n\nWatchersLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile) ->\n link = ($scope, $el, $attrs) ->\n selectedItem = null\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true)\n\n # Get prefiltered users by text\n # and without now watched users.\n getFilteredUsers = (text=\"\") ->\n _filterUsers = (text, user) ->\n if selectedItem && _.find(selectedItem.watchers, (x) -> x == user.id)\n return false\n\n username = user.full_name_display.toUpperCase()\n text = text.toUpperCase()\n return _.contains(username, text)\n\n users = _.clone($scope.activeUsers, true)\n users = _.filter(users, _.partial(_filterUsers, text))\n return users\n\n # Render the specific list of users.\n render = (users) ->\n ctx = {\n selected: false\n users: _.first(users, 5)\n showMore: users.length > 5\n }\n\n html = usersTemplate(ctx)\n html = $compile(html)($scope)\n $el.find(\".ticket-watchers\").html(html)\n\n closeLightbox = () ->\n lightboxKeyboardNavigationService.stop()\n lightboxService.close($el)\n\n $scope.$on \"watcher:add\", (ctx, item) ->\n selectedItem = item\n\n users = getFilteredUsers()\n render(users)\n\n lightboxService.open($el).then ->\n $el.find(\"input\").focus()\n lightboxKeyboardNavigationService.init($el)\n\n $scope.$watch \"usersSearch\", (searchingText) ->\n if not searchingText?\n return\n\n users = getFilteredUsers(searchingText)\n render(users)\n $el.find(\"input\").focus()\n\n $el.on \"click\", \".user-list-single\", debounce 2000, (event) ->\n closeLightbox()\n\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n $scope.$apply ->\n $scope.usersSearch = null\n $scope.$broadcast(\"watcher:added\", target.data(\"user-id\"))\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.usersSearch = null\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n templateUrl: \"common/lightbox/lightbox-users.html\"\n link:link\n }\n\nmodule.directive(\"tgLbWatchers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", WatchersLightboxDirective])\n\n\n#############################################################################\n## Attachment Preview Lighbox\n#############################################################################\n\nAttachmentPreviewLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile) ->\n link = ($scope, $el, attrs) ->\n template = $template.get(\"common/lightbox/lightbox-attachment-preview.html\", true)\n\n $scope.$on \"attachment:preview\", (event, attachment) ->\n lightboxService.open($el)\n render(attachment)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n render = (attachment) ->\n ctx = {\n url: attachment.url,\n title: attachment.description,\n name: attachment.name\n }\n\n html = template(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n return {\n link: link\n }\n\nmodule.directive(\"tgLbAttachmentPreview\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", AttachmentPreviewLightboxDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n# Copyright (C) 2014-2015 Juan Francisco Alcántara \n# Copyright (C) 2014-2015 Alejandro Alonso \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/loader.coffee\n###\n\n# FIXME: this code not follows any style and any good practices on coffeescript\n# and it should be rewritten in coffeescript style classes.\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaCommon\")\n\nLoaderDirective = (tgLoader, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n tgLoader.onStart () ->\n $(document.body).addClass(\"loader-active\")\n $el.addClass(\"active\")\n\n tgLoader.onEnd () ->\n $(document.body).removeClass(\"loader-active\")\n $el.removeClass(\"active\")\n\n return {\n link: link\n }\n\nmodule.directive(\"tgLoader\", [\"tgLoader\", \"$rootScope\", LoaderDirective])\n\nLoader = ($rootscope) ->\n config = {\n minTime: 300\n }\n\n open = false\n startLoadTime = 0\n requestCount = 0\n lastResponseDate = 0\n\n pageLoaded = (force = false) ->\n if startLoadTime\n timeoutValue = 0\n\n if !force\n endTime = new Date().getTime()\n diff = endTime - startLoadTime\n\n if diff < config.minTime\n timeoutValue = config.minTime - diff\n\n timeout timeoutValue, ->\n $rootscope.$broadcast(\"loader:end\")\n open = false\n window.prerenderReady = true # Needed by Prerender Server\n\n startLoadTime = 0\n requestCount = 0\n lastResponseDate = 0\n\n autoClose = () ->\n intervalAuto = setInterval (() ->\n if lastResponseDate && requestCount == 0\n pageLoaded()\n\n clearInterval(intervalAuto)\n ), 50\n\n start = () ->\n startLoadTime = new Date().getTime()\n $rootscope.$broadcast(\"loader:start\")\n open = true\n\n return {\n pageLoaded: pageLoaded\n start: (auto=false) ->\n if !open\n start()\n autoClose() if auto\n onStart: (fn) ->\n $rootscope.$on(\"loader:start\", fn)\n\n onEnd: (fn) ->\n $rootscope.$on(\"loader:end\", fn)\n\n logRequest: () ->\n requestCount++\n\n logResponse: () ->\n requestCount--\n lastResponseDate = new Date().getTime()\n }\n\n\nLoader.$inject = [\"$rootScope\"]\n\nmodule.factory(\"tgLoader\", Loader)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/lightboxes.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\nTgLoadingService = ($compile) ->\n spinner = \"loading...\"\n\n return () ->\n service = {\n settings: {\n target: null,\n scope: null,\n classes: []\n timeout: 0,\n template: null\n },\n target: (target) ->\n service.settings.target = target\n\n return service\n scope: (scope) ->\n service.settings.scope = scope\n\n return service\n template: (template) ->\n service.settings.template = template\n\n return service\n removeClasses: (classess...) ->\n service.settings.classes = classess\n\n return service\n timeout: (timeout) ->\n service.settings.timeout = timeout\n\n return service\n\n start: ->\n target = service.settings.target\n service.settings.classes.map (className) -> target.removeClass(className)\n\n # The loader is shown after that quantity of milliseconds\n timeoutId = setTimeout (->\n if not target.hasClass('loading')\n if !service.settings.template\n service.settings.template = target.html()\n\n target.addClass('loading')\n\n target.html(spinner)\n ), service.settings.timeout\n\n service.settings.timeoutId = timeoutId\n\n return service\n\n finish: ->\n target = service.settings.target\n timeoutId = service.settings.timeoutId\n\n if timeoutId\n clearTimeout(timeoutId)\n\n removeClasses = service.settings.classes\n removeClasses.map (className) -> service.settings.target.addClass(className)\n\n target.html(service.settings.template)\n target.removeClass('loading')\n\n if service.settings.scope\n $compile(target.contents())(service.settings.scope)\n\n return service\n }\n\n return service\n\nTgLoadingService.$inject = [\n \"$compile\"\n]\n\nmodule.factory(\"$tgLoading\", TgLoadingService)\n\nLoadingDirective = ($loading) ->\n link = ($scope, $el, attr) ->\n currentLoading = null\n template = $el.html()\n\n $scope.$watch attr.tgLoading, (showLoading) =>\n if showLoading\n currentLoading = $loading()\n .target($el)\n .timeout(50)\n .template(template)\n .scope($scope)\n .start()\n else if currentLoading\n currentLoading.finish()\n\n return {\n link:link\n }\n\nmodule.directive(\"tgLoading\", [\"$tgLoading\", LoadingDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/popovers.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaCommon\")\n\n#############################################################################\n## UserStory status Directive (popover for change status)\n#############################################################################\n\nUsStatusDirective = ($repo, $template) ->\n ###\n Print the status of a US and a popover to change it.\n - tg-us-status: The user story\n - on-update: Method call after US is updated\n\n Example:\n\n div.status(tg-us-status=\"us\" on-update=\"ctrl.loadSprintState()\")\n a.us-status(href=\"\", title=\"Status Name\")\n\n NOTE: This directive need 'usStatusById' and 'project'.\n ###\n template = $template.get(\"common/popover/popover-us-status.html\", true)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n render = (us) ->\n usStatusDomParent = $el.find(\".us-status\")\n usStatusDom = $el.find(\".us-status .us-status-bind\")\n usStatusById = $scope.usStatusById\n\n if usStatusById[us.status]\n usStatusDom.text(usStatusById[us.status].name)\n usStatusDomParent.css(\"color\", usStatusById[us.status].color)\n\n $el.on \"click\", \".us-status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", debounce 2000, (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n target = angular.element(event.currentTarget)\n\n us = $scope.$eval($attrs.tgUsStatus)\n us.status = target.data(\"status-id\")\n render(us)\n\n $el.find(\".pop-status\").popover().close()\n\n $scope.$apply () ->\n $repo.save(us).then ->\n $scope.$eval($attrs.onUpdate)\n\n\n $scope.$on(\"userstories:loaded\", -> render($scope.$eval($attrs.tgUsStatus)))\n $scope.$on(\"$destroy\", -> $el.off())\n\n # Bootstrap\n us = $scope.$eval($attrs.tgUsStatus)\n render(us)\n\n bindOnce $scope, \"project\", (project) ->\n html = template({\"statuses\": project.us_statuses})\n $el.append(html)\n\n # If the user has not enough permissions the click events are unbinded\n if $scope.project.my_permissions.indexOf(\"modify_us\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n\n return {link: link}\n\nmodule.directive(\"tgUsStatus\", [\"$tgRepo\", \"$tgTemplate\", UsStatusDirective])\n\n#############################################################################\n## Related Task Status Directive\n#############################################################################\n\nRelatedTaskStatusDirective = ($repo, $template) ->\n ###\n Print the status of a related task and a popover to change it.\n - tg-related-task-status: The related task\n - on-update: Method call after US is updated\n\n Example:\n\n div.status(tg-related-task-status=\"task\" on-update=\"ctrl.loadSprintState()\")\n a.task-status(href=\"\", title=\"Status Name\")\n\n NOTE: This directive need 'taskStatusById' and 'project'.\n ###\n selectionTemplate = $template.get(\"common/popover/popover-related-task-status.html\", true)\n\n updateTaskStatus = ($el, task, taskStatusById) ->\n taskStatusDomParent = $el.find(\".us-status\")\n taskStatusDom = $el.find(\".task-status .task-status-bind\")\n\n if taskStatusById[task.status]\n taskStatusDom.text(taskStatusById[task.status].name)\n taskStatusDomParent.css('color', taskStatusById[task.status].color)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n task = $scope.$eval($attrs.tgRelatedTaskStatus)\n notAutoSave = $scope.$eval($attrs.notAutoSave)\n autoSave = !notAutoSave\n\n $el.on \"click\", \".task-status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n $el.find(\".pop-status\").popover().open()\n\n # pop = $el.find(\".pop-status\")\n # popoverService.open(pop)\n\n $el.on \"click\", \".status\", debounce 2000, (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n task.status = target.data(\"status-id\")\n $el.find(\".pop-status\").popover().close()\n updateTaskStatus($el, task, $scope.taskStatusById)\n\n if autoSave\n $scope.$apply () ->\n $repo.save(task).then ->\n $scope.$eval($attrs.onUpdate)\n $scope.$emit(\"related-tasks:status-changed\")\n\n taiga.bindOnce $scope, \"project\", (project) ->\n $el.append(selectionTemplate({ 'statuses': project.task_statuses }))\n updateTaskStatus($el, task, $scope.taskStatusById)\n\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_task\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgRelatedTaskStatus\", [\"$tgRepo\", \"$tgTemplate\", RelatedTaskStatusDirective])\n\n#############################################################################\n## jQuery plugin for Popover\n#############################################################################\n\n$.fn.popover = () ->\n $el = @\n\n isVisible = () =>\n $el.css({\n \"display\": \"block\",\n \"visibility\": \"hidden\"\n })\n\n docViewTop = $(window).scrollTop()\n docViewBottom = docViewTop + $(window).height()\n\n docViewWidth = $(window).width()\n docViewRight = docViewWidth\n docViewLeft = 0\n\n elemTop = $el.offset().top\n elemBottom = elemTop + $el.height()\n\n elemWidth = $el.width()\n elemLeft = $el.offset().left\n elemRight = $el.offset().left + elemWidth\n\n $el.css({\n \"display\": \"none\",\n \"visibility\": \"visible\"\n })\n\n return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop) && (elemLeft >= docViewLeft) && (elemRight <= docViewRight))\n\n closePopover = (onClose) =>\n if onClose then onClose.call($el)\n\n $el.fadeOut () =>\n $el\n .removeClass(\"active\")\n .removeClass(\"fix\")\n\n $el.off(\"popup:close\")\n\n\n closeAll = () =>\n $(\".popover.active\").each () ->\n $(this).trigger(\"popup:close\")\n\n open = (onClose) =>\n if $el.hasClass(\"active\")\n close()\n else\n closeAll()\n\n if !isVisible()\n $el.addClass(\"fix\")\n\n $el.fadeIn () =>\n $el.addClass(\"active\")\n $(document.body).off(\"popover\")\n\n $(document.body).one \"click.popover\", () =>\n closeAll()\n\n $el.on \"popup:close\", (e) => closePopover(onClose)\n\n close = () =>\n $el.trigger(\"popup:close\")\n\n return {open: open, close: close, closeAll: closeAll}\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/raven-logger.coffee\n###\n\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaCommon\")\n\nExceptionHandlerFactory = ($log, @config) ->\n ravenConfig = @config.get(\"ravenConfig\", null)\n if ravenConfig\n $log.debug \"Using the RavenJS exception handler.\"\n Raven.config(ravenConfig).install()\n return (exception, cause) ->\n $log.error.apply($log, arguments)\n Raven.captureException(exception)\n\n else\n $log.debug \"Using the default logging exception handler.\"\n return (exception, cause) ->\n $log.error.apply($log, arguments)\n\nmodule.factory(\"$exceptionHandler\", [\"$log\", \"$tgConfig\", ExceptionHandlerFactory])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/tags.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaCommon\")\n\n# Directive that parses/format tags inputfield.\n\nTagsDirective = ->\n formatter = (v) ->\n if _.isArray(v)\n return v.join(\", \")\n return \"\"\n\n parser = (v) ->\n return [] if not v\n result = _(v.split(\",\")).map((x) -> _.str.trim(x))\n\n return result.value()\n\n link = ($scope, $el, $attrs, $ctrl) ->\n $ctrl.$formatters.push(formatter)\n $ctrl.$parsers.push(parser)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n require: \"ngModel\"\n link: link\n }\n\nmodule.directive(\"tgTags\", TagsDirective)\n\n\nColorizeTagsDirective = ->\n templates = {\n backlog: _.template(\"\"\"\n <% _.each(tags, function(tag) { %>\n \"><%- tag.name %>\n <% }) %>\n \"\"\")\n kanban: _.template(\"\"\"\n <% _.each(tags, function(tag) { %>\n \" title=\"<%- tag.name %>\" />\n <% }) %>\n \"\"\")\n taskboard: _.template(\"\"\"\n <% _.each(tags, function(tag) { %>\n \" title=\"<%- tag.name %>\" />\n <% }) %>\n \"\"\")\n }\n\n link = ($scope, $el, $attrs, $ctrl) ->\n render = (srcTags) ->\n template = templates[$attrs.tgColorizeTagsType]\n srcTags.sort()\n tags = _.map srcTags, (tag) ->\n color = $scope.project.tags_colors[tag]\n return {name: tag, color: color}\n\n html = template({tags: tags})\n $el.html(html)\n\n $scope.$watch $attrs.tgColorizeTags, (tags) ->\n render(tags) if tags?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgColorizeTags\", ColorizeTagsDirective)\n\n\n#############################################################################\n## TagLine Directive (for Lightboxes)\n#############################################################################\n\nLbTagLineDirective = ($rs, $template, $compile) ->\n ENTER_KEY = 13\n COMMA_KEY = 188\n\n templateTags = $template.get(\"common/tag/lb-tag-line-tags.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n ## Render\n renderTags = (tags, tagsColors) ->\n ctx = {\n tags: _.map(tags, (t) -> {name: t, color: tagsColors[t]})\n }\n\n _.map ctx.tags, (tag) =>\n if tag.color\n tag.style = \"border-left: 5px solid #{tag.color}\"\n\n html = $compile(templateTags(ctx))($scope)\n $el.find(\"div.tags-container\").html(html)\n\n showSaveButton = -> $el.find(\".save\").removeClass(\"hidden\")\n hideSaveButton = -> $el.find(\".save\").addClass(\"hidden\")\n\n resetInput = ->\n $el.find(\"input\").val(\"\")\n $el.find(\"input\").autocomplete(\"close\")\n\n ## Aux methods\n addValue = (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue, false)\n tags = [] if not tags?\n tags.push(value) if value not in tags\n\n $scope.$apply ->\n $model.$setViewValue(tags)\n\n hideSaveButton()\n\n deleteValue = (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue, false)\n tags = _.pull(tags, value)\n\n $scope.$apply ->\n $model.$setViewValue(tags)\n\n saveInputTag = () ->\n value = $el.find(\"input\").val()\n\n addValue(value)\n resetInput()\n\n removeInputLastCharacter = (input) =>\n inputValue = input.val()\n input.val inputValue.substring(0, inputValue.length - 1)\n\n ## Events\n $el.on \"keypress\", \"input\", (event) ->\n return if event.keyCode != ENTER_KEY\n event.preventDefault()\n\n $el.on \"keyup\", \"input\", (event) ->\n target = angular.element(event.currentTarget)\n\n if event.keyCode == ENTER_KEY\n saveInputTag()\n else if event.keyCode == COMMA_KEY\n removeInputLastCharacter(target)\n saveInputTag()\n else\n if target.val().length\n showSaveButton()\n else\n hideSaveButton()\n\n $el.on \"click\", \".save\", (event) ->\n event.preventDefault()\n saveInputTag()\n\n $el.on \"click\", \".icon-delete\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n value = target.siblings(\".tag-name\").text()\n deleteValue(value)\n\n bindOnce $scope, \"project\", (project) ->\n positioningFunction = (position, elements) ->\n menu = elements.element.element\n menu.css(\"width\", elements.target.width)\n menu.css(\"top\", position.top)\n menu.css(\"left\", position.left)\n\n $el.find(\"input\").autocomplete({\n source: _.keys(project.tags_colors)\n position: {\n my: \"left top\",\n using: positioningFunction\n }\n select: (event, ui) ->\n addValue(ui.item.value)\n ui.item.value = \"\"\n })\n\n $scope.$watch $attrs.ngModel, (tags) ->\n tagsColors = $scope.project?.tags_colors or []\n renderTags(tags, tagsColors)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link,\n require:\"ngModel\"\n templateUrl: \"common/tag/lb-tag-line.html\"\n }\n\nmodule.directive(\"tgLbTagLine\", [\"$tgResources\", \"$tgTemplate\", \"$compile\", LbTagLineDirective])\n\n\n#############################################################################\n## TagLine Directive (for detail pages)\n#############################################################################\n\nTagLineDirective = ($rootScope, $repo, $rs, $confirm, $qqueue, $template, $compile) ->\n ENTER_KEY = 13\n ESC_KEY = 27\n COMMA_KEY = 188\n\n templateTags = $template.get(\"common/tag/tags-line-tags.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n if $attrs.requiredPerm?\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1\n\n return true\n\n ## Render\n renderTags = (tags, tagsColors) ->\n ctx = {\n tags: _.map(tags, (t) -> {name: t, color: tagsColors[t]})\n isEditable: isEditable()\n }\n html = $compile(templateTags(ctx))($scope)\n $el.find(\"div.tags-container\").html(html)\n\n renderInReadModeOnly = ->\n $el.find(\".add-tag\").remove()\n $el.find(\"input\").remove()\n $el.find(\".save\").remove()\n\n showAddTagButton = -> $el.find(\".add-tag\").removeClass(\"hidden\")\n hideAddTagButton = -> $el.find(\".add-tag\").addClass(\"hidden\")\n\n showAddTagButtonText = -> $el.find(\".add-tag-text\").removeClass(\"hidden\")\n hideAddTagButtonText = -> $el.find(\".add-tag-text\").addClass(\"hidden\")\n\n showSaveButton = -> $el.find(\".save\").removeClass(\"hidden\")\n hideSaveButton = -> $el.find(\".save\").addClass(\"hidden\")\n\n showInput = -> $el.find(\"input\").removeClass(\"hidden\").focus()\n hideInput = -> $el.find(\"input\").addClass(\"hidden\").blur()\n resetInput = ->\n $el.find(\"input\").val(\"\")\n $el.find(\"input\").autocomplete(\"close\")\n\n ## Aux methods\n addValue = $qqueue.bindAdd (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue.tags, false)\n tags = [] if not tags?\n tags.push(value) if value not in tags\n\n model = $model.$modelValue.clone()\n model.tags = tags\n $model.$setViewValue(model)\n\n onSuccess = ->\n $rootScope.$broadcast(\"object:updated\")\n onError = ->\n $confirm.notify(\"error\")\n model.revert()\n $model.$setViewValue(model)\n $repo.save(model).then(onSuccess, onError)\n\n hideSaveButton()\n\n deleteValue = $qqueue.bindAdd (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue.tags, false)\n tags = _.pull(tags, value)\n\n model = $model.$modelValue.clone()\n model.tags = tags\n $model.$setViewValue(model)\n\n onSuccess = ->\n $rootScope.$broadcast(\"object:updated\")\n onError = ->\n $confirm.notify(\"error\")\n model.revert()\n $model.$setViewValue(model)\n\n return $repo.save(model).then(onSuccess, onError)\n\n saveInputTag = () ->\n value = $el.find(\"input\").val()\n\n addValue(value)\n resetInput()\n\n removeInputLastCharacter = (input) =>\n inputValue = input.val()\n input.val inputValue.substring(0, inputValue.length - 1)\n\n ## Events\n $el.on \"keypress\", \"input\", (event) ->\n return if event.keyCode not in [ENTER_KEY, ESC_KEY]\n event.preventDefault()\n\n $el.on \"keyup\", \"input\", (event) ->\n target = angular.element(event.currentTarget)\n\n if event.keyCode == ENTER_KEY\n saveInputTag()\n else if event.keyCode == COMMA_KEY\n removeInputLastCharacter(target)\n saveInputTag()\n else if event.keyCode == ESC_KEY\n resetInput()\n hideInput()\n hideSaveButton()\n showAddTagButton()\n else\n if target.val().length\n showSaveButton()\n else\n hideSaveButton()\n\n $el.on \"click\", \".save\", (event) ->\n event.preventDefault()\n saveInputTag()\n\n $el.on \"click\", \".add-tag\", (event) ->\n event.preventDefault()\n hideAddTagButton()\n showInput()\n\n $el.on \"click\", \".icon-delete\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n value = target.siblings(\".tag-name\").text()\n\n deleteValue(value)\n\n bindOnce $scope, \"project.tags_colors\", (tags_colors) ->\n if not isEditable()\n renderInReadModeOnly()\n return\n\n showAddTagButton()\n\n positioningFunction = (position, elements) ->\n menu = elements.element.element\n menu.css(\"width\", elements.target.width)\n menu.css(\"top\", position.top)\n menu.css(\"left\", position.left)\n\n $el.find(\"input\").autocomplete({\n source: _.keys(tags_colors)\n position: {\n my: \"left top\",\n using: positioningFunction\n }\n select: (event, ui) ->\n addValue(ui.item.value)\n ui.item.value = \"\"\n })\n\n $scope.$watch $attrs.ngModel, (model) ->\n return if not model\n\n if model.tags?.length\n hideAddTagButtonText()\n else\n showAddTagButtonText()\n\n tagsColors = $scope.project?.tags_colors or []\n renderTags(model.tags, tagsColors)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link,\n require:\"ngModel\"\n templateUrl: \"common/tag/tag-line.html\"\n }\n\nmodule.directive(\"tgTagLine\", [\"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$tgQqueue\",\n \"$tgTemplate\", \"$compile\", TagLineDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/wisiwyg.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaCommon\")\n\n# How to test lists (-, *, 1.)\n# test it with text after & before the list\n# + is the cursor position\n\n# CASE 1\n# - aa+\n# --> enter\n# - aa\n# - +\n\n# CASE 1\n# - +\n# --> enter\n\n# +\n\n# CASE 3\n# - bb+cc\n# --> enter\n# - bb\n# - cc\n\n# CASE 3\n# +- aa\n# --> enter\n\n# - aa\n\n#############################################################################\n## WYSIWYG markitup editor directive\n#############################################################################\nMarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $translate) ->\n previewTemplate = $template.get(\"common/wysiwyg/wysiwyg-markitup-preview.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n element = angular.element($el)\n previewDomNode = $(\"
\", {class: \"preview\"})\n\n closePreviewMode = ->\n element.parents(\".markdown\").find(\".preview\").remove()\n element.parents(\".markItUp\").show()\n\n $scope.$on \"markdown-editor:submit\", ->\n closePreviewMode()\n\n preview = ->\n markdownDomNode = element.parents(\".markdown\")\n markItUpDomNode = element.parents(\".markItUp\")\n $rs.mdrender.render($scope.projectId, $model.$modelValue).then (data) ->\n html = previewTemplate({data: data.data})\n html = $compile(html)($scope)\n\n markdownDomNode.append(html)\n markItUpDomNode.hide()\n\n markdown = element.closest(\".markdown\")\n\n markdown.on \"mouseup.preview\", \".preview\", (event) ->\n event.preventDefault()\n target = angular.element(event.target)\n\n if !target.is('a') and $selectedText.get().length\n return\n\n markdown.off(\".preview\")\n closePreviewMode()\n\n setCaretPosition = (textarea, caretPosition) ->\n if textarea.createTextRange\n range = textarea.createTextRange()\n range.move(\"character\", caretPosition)\n range.select()\n\n else if textarea.selectionStart\n textarea.focus()\n textarea.setSelectionRange(caretPosition, caretPosition)\n\n # Calculate the scroll position\n totalLines = textarea.value.split(\"\\n\").length\n line = textarea.value[0..(caretPosition - 1)].split(\"\\n\").length\n scrollRelation = line / totalLines\n $el.scrollTop((scrollRelation * $el[0].scrollHeight) - ($el.height() / 2))\n\n addLine = (textarea, nline, replace) ->\n lines = textarea.value.split(\"\\n\")\n\n if replace\n lines[nline] = replace + lines[nline]\n else\n lines[nline] = \"\"\n\n cursorPosition = 0\n\n for line, key in lines\n cursorPosition += line.length + 1 || 1\n\n break if key == nline\n\n textarea.value = lines.join(\"\\n\")\n\n #return the new position\n if replace\n return cursorPosition - lines[nline].length + replace.length - 1\n else\n return cursorPosition\n\n prepareUrlFormatting = (markItUp) ->\n regex = /(<<<|>>>)/gi\n result = 0\n indices = []\n (indices.push(result.index)) while ( (result = regex.exec(markItUp.textarea.value)) )\n markItUp.donotparse = indices\n\n urlFormatting = (markItUp) ->\n regex = /<<>>/gi\n endIndex = 0\n loop\n result = regex.exec(markItUp.textarea.value)\n break if !result\n if result.index not in markItUp.donotparse\n endIndex = result.index\n break\n\n value = markItUp.textarea.value\n url = value.substring(startIndex, endIndex).replace('<<<', '').replace('>>>', '')\n url = url.replace('(', '%28').replace(')', '%29')\n url = url.replace('[', '%5B').replace(']', '%5D')\n value = value.substring(0, startIndex) + url + value.substring(endIndex+3, value.length)\n markItUp.textarea.value = value\n markItUp.donotparse = undefined\n\n markdownTitle = (markItUp, char) ->\n heading = \"\"\n n = $.trim(markItUp.selection or markItUp.placeHolder).length\n\n for i in [0..n-1]\n heading += char\n\n return \"\\n\"+heading+\"\\n\"\n\n renderMarkItUp = () ->\n markdownSettings =\n nameSpace: \"markdown\"\n onShiftEnter: {keepDefault:false, openWith:\"\\n\\n\"}\n onEnter:\n keepDefault: false,\n replaceWith: () ->\n # Allow textcomplete to intercept the enter key if the options list is displayed\n # @todo There doesn't seem to be a more graceful way to do this with the textcomplete API.\n if not $('.textcomplete-dropdown').is(':visible')\n \"\\n\"\n afterInsert: (data) ->\n lines = data.textarea.value.split(\"\\n\")\n # Detect if we are in this situation +- aa at the beginning if the textarea\n if data.caretPosition > 0\n cursorLine = data.textarea.value[0..(data.caretPosition - 1)].split(\"\\n\").length\n else\n cursorLine = 1\n\n newLineContent = data.textarea.value[data.caretPosition..].split(\"\\n\")[0]\n lastLine = lines[cursorLine - 1]\n\n # unordered list -\n match = lastLine.match /^(\\s*- ).*/\n\n if match\n emptyListItem = lastLine.match /^(\\s*)\\-\\s$/\n\n if emptyListItem\n nline = cursorLine - 1\n replace = null\n else\n nline = cursorLine\n replace = \"#{match[1]}\"\n\n markdownCaretPositon = addLine(data.textarea, nline, replace)\n\n # unordered list *\n match = lastLine.match /^(\\s*\\* ).*/\n\n if match\n emptyListItem = lastLine.match /^(\\s*\\* )$/\n\n if emptyListItem\n nline = cursorLine - 1\n replace = null\n else\n nline = cursorLine\n replace = \"#{match[1]}\"\n\n markdownCaretPositon = addLine(data.textarea, nline, replace)\n\n # ordered list\n match = lastLine.match /^(\\s*)(\\d+)\\.\\s/\n\n if match\n emptyListItem = lastLine.match /^(\\s*)(\\d+)\\.\\s$/\n\n if emptyListItem\n nline = cursorLine - 1\n replace = null\n else\n nline = cursorLine\n replace = \"#{match[1] + (parseInt(match[2], 10) + 1)}. \"\n\n markdownCaretPositon = addLine(data.textarea, nline, replace)\n\n setCaretPosition(data.textarea, markdownCaretPositon) if markdownCaretPositon\n\n markupSet: [\n {\n name: $translate.instant(\"COMMON.WYSIWYG.H1_BUTTON\")\n key: \"1\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.H1_SAMPLE_TEXT\")\n closeWith: (markItUp) -> markdownTitle(markItUp, \"=\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.H2_BUTTON\")\n key: \"2\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.H2_SAMPLE_TEXT\")\n closeWith: (markItUp) -> markdownTitle(markItUp, \"-\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.H3_BUTTON\")\n key: \"3\"\n openWith: \"### \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.H3_SAMPLE_TEXT\")\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.BOLD_BUTTON\")\n key: \"B\"\n openWith: \"**\"\n closeWith: \"**\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.BOLD_BUTTON_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT\")\n key: \"I\"\n openWith: \"_\"\n closeWith: \"_\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.STRIKE_BUTTON\")\n key: \"S\"\n openWith: \"~~\"\n closeWith: \"~~\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.STRIKE_SAMPLE_TEXT\")\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.BULLETED_LIST_BUTTON\")\n openWith: \"- \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.BULLETED_LIST_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.NUMERIC_LIST_BUTTON\")\n openWith: (markItUp) -> markItUp.line+\". \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.NUMERIC_LIST_SAMPLE_TEXT\")\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.PICTURE_BUTTON\")\n key: \"P\"\n openWith: \"![\"\n closeWith: '](<<<[![Url:!:http://]!]>>> \"[![Title]!]\")'\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.PICTURE_SAMPLE_TEXT\")\n beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp)\n afterInsert:(markItUp) -> urlFormatting(markItUp)\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.LINK_BUTTON\")\n key: \"L\"\n openWith: \"[\"\n closeWith: '](<<<[![Url:!:http://]!]>>> \"[![Title]!]\")'\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.LINK_SAMPLE_TEXT\")\n beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp)\n afterInsert:(markItUp) -> urlFormatting(markItUp)\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.QUOTE_BLOCK_BUTTON\")\n openWith: \"> \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.QUOTE_BLOCK_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.CODE_BLOCK_BUTTON\")\n openWith: \"```\\n\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.CODE_BLOCK_SAMPLE_TEXT\")\n closeWith: \"\\n```\"\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.PREVIEW_BUTTON\")\n call: preview\n className: \"preview-icon\"\n },\n ]\n afterInsert: (event) ->\n target = angular.element(event.textarea)\n $model.$setViewValue(target.val())\n\n element\n .markItUpRemove()\n .markItUp(markdownSettings)\n .textcomplete([\n # us, task, and issue autocomplete: #id or #\n {\n cache: true\n match: /(^|\\s)#([a-z0-9]+)$/i,\n search: (term, callback) ->\n term = taiga.slugify(term)\n\n searchTypes = ['issues', 'tasks', 'userstories']\n searchProps = ['ref', 'subject']\n\n filter = (item) =>\n for prop in searchProps\n if taiga.slugify(item[prop]).indexOf(term) >= 0\n return true\n return false\n\n $rs.search.do($scope.projectId, term).then (res) =>\n # ignore wikipages if they're the only results. can't exclude them in search\n if res.count < 1 or res.count == res.wikipages.length\n callback([])\n\n else\n for type in searchTypes\n if res[type] and res[type].length > 0\n callback(res[type].filter(filter), true)\n\n # must signal end of lists\n callback([])\n\n replace: (res) ->\n return \"$1\\##{res.ref} \"\n\n template: (res, term) ->\n return \"\\##{res.ref} - #{res.subject}\"\n }\n\n # username autocomplete: @username or @\n {\n cache: true\n match: /(^|\\s)@([a-z0-9\\-\\._]{2,})$/i\n search: (term, callback) ->\n username = taiga.slugify(term)\n searchProps = ['username', 'full_name', 'full_name_display']\n\n if $scope.project.members.length < 1\n callback([])\n\n else\n callback $scope.project.members.filter (user) =>\n for prop in searchProps\n if taiga.slugify(user[prop]).indexOf(username) >= 0\n return true\n return false\n\n replace: (user) ->\n return \"$1@#{user.username} \"\n\n template: (user) ->\n return \"#{user.username} - #{user.full_name_display}\"\n }\n\n # wiki pages autocomplete: [[slug or [[\n # if the search function was called with the 3rd param the regex\n # like the docs claim, we could combine this with the #123 search\n {\n cache: true\n match: /(^|\\s)\\[\\[([a-z0-9\\-]+)$/i\n search: (term, callback) ->\n term = taiga.slugify(term)\n\n $rs.search.do($scope.projectId, term).then (res) =>\n if res.count < 1\n callback([])\n\n if res.count < 1 or not res.wikipages or res.wikipages.length <= 0\n callback([])\n\n else\n callback res.wikipages.filter((page) =>\n return taiga.slugify(page['slug']).indexOf(term) >= 0\n ), true\n\n # must signal end of lists\n callback([])\n\n\n replace: (res) ->\n return \"$1[[#{res.slug}]]\"\n\n template: (res, term) ->\n return res.slug\n }\n ],\n {\n debounce: 200\n }\n )\n\n renderMarkItUp()\n\n unbind = $rootscope.$on \"$translateChangeEnd\", renderMarkItUp\n\n element.on \"keypress\", (event) ->\n $scope.$apply()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n unbind()\n\n return {link:link, require:\"ngModel\"}\n\nmodule.directive(\"tgMarkitup\", [\"$rootScope\", \"$tgResources\", \"$selectedText\", \"$tgTemplate\", \"$compile\",\n \"$translate\", MarkitupDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ndebounceLeading = @.taiga.debounceLeading\n\n\nmodule = angular.module(\"taigaBacklog\")\n\n#############################################################################\n## Issues Filters Directive\n#############################################################################\n\nBacklogFiltersDirective = ($q, $log, $location, $templates) ->\n template = $templates.get(\"backlog/filters.html\", true)\n templateSelected = $templates.get(\"backlog/filter-selected.html\", true)\n\n link = ($scope, $el, $attrs) ->\n currentFiltersType = ''\n\n $ctrl = $el.closest(\".wrapper\").controller()\n selectedFilters = []\n\n showFilters = (title, type) ->\n $el.find(\".filters-cats\").hide()\n $el.find(\".filter-list\").removeClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").removeClass(\"hidden\")\n $el.find(\"h2 a.subfilter span.title\").html(title)\n $el.find(\"h2 a.subfilter span.title\").prop(\"data-type\", type)\n\n currentFiltersType = getFiltersType()\n\n showCategories = ->\n $el.find(\".filters-cats\").show()\n $el.find(\".filter-list\").addClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").addClass(\"hidden\")\n\n initializeSelectedFilters = () ->\n showCategories()\n selectedFilters = []\n\n for name, values of $scope.filters\n for val in values\n selectedFilters.push(val) if val.selected\n\n renderSelectedFilters()\n\n renderSelectedFilters = ->\n _.map selectedFilters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = templateSelected({filters: selectedFilters})\n $el.find(\".filters-applied\").html(html)\n\n renderFilters = (filters) ->\n _.map filters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = template({filters:filters})\n $el.find(\".filter-list\").html(html)\n\n getFiltersType = () ->\n return $el.find(\"h2 a.subfilter span.title\").prop('data-type')\n\n reloadUserstories = () ->\n currentFiltersType = getFiltersType()\n\n $q.all([$ctrl.loadUserstories(), $ctrl.generateFilters()]).then () ->\n currentFilters = $scope.filters[currentFiltersType]\n renderFilters(_.reject(currentFilters, \"selected\"))\n\n toggleFilterSelection = (type, id) ->\n currentFiltersType = getFiltersType()\n\n filters = $scope.filters[type]\n filter = _.find(filters, {id: id})\n filter.selected = (not filter.selected)\n\n if filter.selected\n selectedFilters.push(filter)\n $scope.$apply ->\n $ctrl.selectFilter(type, id)\n else\n selectedFilters = _.reject selectedFilters, (selected) ->\n return filter.type == selected.type && filter.id == selected.id\n\n $ctrl.unselectFilter(type, id)\n\n renderSelectedFilters(selectedFilters)\n\n if type == currentFiltersType\n renderFilters(_.reject(filters, \"selected\"))\n\n reloadUserstories()\n\n selectQFilter = debounceLeading 100, (value) ->\n return if value is undefined\n\n if value.length == 0\n $ctrl.replaceFilter(\"q\", null)\n else\n $ctrl.replaceFilter(\"q\", value)\n\n reloadUserstories()\n\n $scope.$watch(\"filtersQ\", selectQFilter)\n\n ## Angular Watchers\n $scope.$on \"backlog:loaded\", (ctx) ->\n initializeSelectedFilters()\n\n $scope.$on \"filters:update\", (ctx) ->\n $ctrl.generateFilters().then () ->\n filters = $scope.filters[currentFiltersType]\n\n if currentFiltersType\n renderFilters(_.reject(filters, \"selected\"))\n\n ## Dom Event Handlers\n $el.on \"click\", \".filters-cats > ul > li > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n tags = $scope.filters[target.data(\"type\")]\n\n renderFilters(_.reject(tags, \"selected\"))\n showFilters(target.attr(\"title\"), target.data('type'))\n\n $el.on \"click\", \".filters-inner > .filters-step-cat > .breadcrumb > .back\", (event) ->\n event.preventDefault()\n showCategories()\n\n $el.on \"click\", \".filters-applied a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n id = target.data(\"id\")\n type = target.data(\"type\")\n toggleFilterSelection(type, id)\n\n $el.on \"click\", \".filter-list .single-filter\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n if target.hasClass(\"active\")\n target.removeClass(\"active\")\n else\n target.addClass(\"active\")\n\n id = target.data(\"id\")\n type = target.data(\"type\")\n toggleFilterSelection(type, id)\n\n return {link:link}\n\nmodule.directive(\"tgBacklogFilters\", [\"$q\", \"$log\", \"$tgLocation\", \"$tgTemplate\", BacklogFiltersDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaBacklog\")\n\n#############################################################################\n## Creare/Edit Sprint Lightbox Directive\n#############################################################################\n\nCreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, $translate) ->\n link = ($scope, $el, attrs) ->\n hasErrors = false\n createSprint = true\n\n resetSprint = () ->\n $scope.sprint = {\n project: null\n name: null\n estimated_start: null\n estimated_finish: null\n }\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n target = angular.element(event.currentTarget)\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n\n submitButton = $el.find(\".submit-button\")\n form = $el.find(\"form\").checksley()\n\n if not form.validate()\n hasErrors = true\n $el.find(\".last-sprint-name\").addClass(\"disappear\")\n return\n\n hasErrors = false\n newSprint = angular.copy($scope.sprint)\n broadcastEvent = null\n\n if createSprint\n newSprint.estimated_start = moment(newSprint.estimated_start, prettyDate).format(\"YYYY-MM-DD\")\n newSprint.estimated_finish = moment(newSprint.estimated_finish,prettyDate).format(\"YYYY-MM-DD\")\n promise = $repo.create(\"milestones\", newSprint)\n broadcastEvent = \"sprintform:create:success\"\n else\n newSprint.setAttr(\"estimated_start\",\n moment(newSprint.estimated_start, prettyDate).format(\"YYYY-MM-DD\"))\n newSprint.setAttr(\"estimated_finish\",\n moment(newSprint.estimated_finish, prettyDate).format(\"YYYY-MM-DD\"))\n promise = $repo.save(newSprint)\n broadcastEvent = \"sprintform:edit:success\"\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise.then (data) ->\n currentLoading.finish()\n $scope.sprintsCounter += 1 if createSprint\n $rootscope.$broadcast(broadcastEvent, data)\n\n lightboxService.close($el)\n\n promise.then null, (data) ->\n currentLoading.finish()\n\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"light-error\", data._error_message)\n else if data.__all__\n $confirm.notify(\"light-error\", data.__all__[0])\n\n remove = ->\n title = $translate.instant(\"LIGHTBOX.DELETE_SPRINT.TITLE\")\n message = $scope.sprint.name\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n onSuccess = ->\n askResponse.finish()\n $scope.milestonesCounter -= 1\n lightboxService.close($el)\n $rootscope.$broadcast(\"sprintform:remove:success\", $scope.sprint)\n\n onError = ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n $repo.remove($scope.sprint).then(onSuccess, onError)\n\n getLastSprint = ->\n openSprints = _.filter $scope.sprints, (sprint) ->\n return !sprint.closed\n\n sortedSprints = _.sortBy openSprints, (sprint) ->\n return moment(sprint.estimated_finish, 'YYYY-MM-DD').format('X')\n\n return sortedSprints[sortedSprints.length - 1]\n\n $scope.$on \"sprintform:create\", (event, projectId) ->\n resetSprint()\n\n form = $el.find(\"form\").checksley()\n form.reset()\n\n createSprint = true\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n $scope.sprint.project = projectId\n $scope.sprint.name = null\n $scope.sprint.slug = null\n\n lastSprint = getLastSprint()\n\n estimatedStart = moment()\n\n if lastSprint\n estimatedStart = moment(lastSprint.estimated_finish)\n else if $scope.sprint.estimated_start\n estimatedStart = moment($scope.sprint.estimated_start)\n\n $scope.sprint.estimated_start = estimatedStart.format(prettyDate)\n\n estimatedFinish = moment().add(2, \"weeks\")\n\n if lastSprint\n estimatedFinish = moment(lastSprint.estimated_finish).add(2, \"weeks\")\n else if $scope.sprint.estimated_finish\n estimatedFinish = moment($scope.sprint.estimated_finish)\n\n $scope.sprint.estimated_finish = estimatedFinish.format(prettyDate)\n\n lastSprintNameDom = $el.find(\".last-sprint-name\")\n if lastSprint?.name?\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME\", {\n lastSprint: lastSprint.name})\n lastSprintNameDom.html(text)\n\n $el.find(\".delete-sprint\").addClass(\"hidden\")\n\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.TITLE\")\n $el.find(\".title\").text(text)\n\n text = $translate.instant(\"COMMON.CREATE\")\n $el.find(\".button-green\").text(text)\n\n lightboxService.open($el)\n $el.find(\".sprint-name\").focus()\n $el.find(\".last-sprint-name\").removeClass(\"disappear\")\n\n $scope.$on \"sprintform:edit\", (ctx, sprint) ->\n resetSprint()\n\n createSprint = false\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n\n $scope.$apply ->\n $scope.sprint = sprint\n $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format(prettyDate)\n $scope.sprint.estimated_finish = moment($scope.sprint.estimated_finish).format(prettyDate)\n\n $el.find(\".delete-sprint\").removeClass(\"hidden\")\n\n editSprint = $translate.instant(\"BACKLOG.EDIT_SPRINT\")\n $el.find(\".title\").text(editSprint)\n\n save = $translate.instant(\"COMMON.SAVE\")\n $el.find(\".button-green\").text(save)\n\n lightboxService.open($el)\n $el.find(\".sprint-name\").focus().select()\n $el.find(\".last-sprint-name\").addClass(\"disappear\")\n\n $el.on \"keyup\", \".sprint-name\", (event) ->\n if $el.find(\".sprint-name\").val().length > 0 or hasErrors\n $el.find(\".last-sprint-name\").addClass(\"disappear\")\n else\n $el.find(\".last-sprint-name\").removeClass(\"disappear\")\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \".delete-sprint .icon-delete\", (event) ->\n event.preventDefault()\n remove()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n resetSprint()\n\n return {link: link}\n\n\nmodule.directive(\"tgLbCreateEditSprint\", [\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$rootScope\",\n \"lightboxService\"\n \"$tgLoading\",\n \"$translate\",\n CreateEditSprint\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\nbindMethods = @.taiga.bindMethods\ngenerateHash = @.taiga.generateHash\n\nmodule = angular.module(\"taigaBacklog\")\n\n#############################################################################\n## Backlog Controller\n#############################################################################\n\nclass BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\",\n \"$tgLoading\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q,\n @location, @appMetaService, @navUrls, @events, @analytics, @translate, @loading) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"BACKLOG.SECTION_NAME\")\n @showTags = false\n @activeFilters = false\n @scope.showGraphPlaceholder = null\n\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"BACKLOG.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"BACKLOG.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n if @rs.userstories.getShowTags(@scope.projectId)\n @showTags = true\n\n @scope.$broadcast(\"showTags\", @showTags)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n initializeEventHandlers: ->\n @scope.$on \"usform:bulk:success\", =>\n @.loadUserstories()\n @.loadProjectStats()\n @analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on backlog\", 1)\n\n @scope.$on \"sprintform:create:success\", =>\n @.loadSprints()\n @.loadProjectStats()\n @analytics.trackEvent(\"sprint\", \"create\", \"create sprint on backlog\", 1)\n\n @scope.$on \"usform:new:success\", =>\n @.loadUserstories()\n @.loadProjectStats()\n\n @rootscope.$broadcast(\"filters:update\")\n @analytics.trackEvent(\"userstory\", \"create\", \"create userstory on backlog\", 1)\n\n @scope.$on \"sprintform:edit:success\", =>\n @.loadProjectStats()\n\n @scope.$on \"sprintform:remove:success\", (event, sprint) =>\n @.loadSprints()\n @.loadProjectStats()\n @.loadUserstories()\n\n if sprint.closed\n @.loadClosedSprints()\n\n @rootscope.$broadcast(\"filters:update\")\n\n @scope.$on \"usform:edit:success\", =>\n @.loadUserstories()\n @rootscope.$broadcast(\"filters:update\")\n\n @scope.$on(\"sprint:us:move\", @.moveUs)\n @scope.$on(\"sprint:us:moved\", @.loadSprints)\n @scope.$on(\"sprint:us:moved\", @.loadProjectStats)\n\n @scope.$on(\"backlog:load-closed-sprints\", @.loadClosedSprints)\n @scope.$on(\"backlog:unload-closed-sprints\", @.unloadClosedSprints)\n\n initializeSubscription: ->\n routingKey1 = \"changes.project.#{@scope.projectId}.userstories\"\n @events.subscribe @scope, routingKey1, (message) =>\n @.loadUserstories()\n @.loadSprints()\n\n routingKey2 = \"changes.project.#{@scope.projectId}.milestones\"\n @events.subscribe @scope, routingKey2, (message) =>\n @.loadSprints()\n\n toggleShowTags: ->\n @scope.$apply =>\n @showTags = !@showTags\n @rs.userstories.storeShowTags(@scope.projectId, @showTags)\n\n toggleActiveFilters: ->\n @activeFilters = !@activeFilters\n\n loadProjectStats: ->\n return @rs.projects.stats(@scope.projectId).then (stats) =>\n @scope.stats = stats\n totalPoints = if stats.total_points then stats.total_points else stats.defined_points\n\n if totalPoints\n @scope.stats.completedPercentage = Math.round(100 * stats.closed_points / totalPoints)\n else\n @scope.stats.completedPercentage = 0\n\n @scope.showGraphPlaceholder = !(stats.total_points? && stats.total_milestones?)\n return stats\n\n unloadClosedSprints: ->\n @scope.$apply =>\n @scope.closedSprints = []\n @rootscope.$broadcast(\"closed-sprints:reloaded\", [])\n\n loadClosedSprints: ->\n params = {closed: true}\n return @rs.sprints.list(@scope.projectId, params).then (result) =>\n sprints = result.milestones\n\n @scope.totalClosedMilestones = result.closed\n\n # NOTE: Fix order of USs because the filter orderBy does not work propertly in partials files\n for sprint in sprints\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\")\n @scope.closedSprints = sprints\n @scope.closedSprintsById = groupBy(sprints, (x) -> x.id)\n @rootscope.$broadcast(\"closed-sprints:reloaded\", sprints)\n return sprints\n\n loadSprints: ->\n params = {closed: false}\n return @rs.sprints.list(@scope.projectId, params).then (result) =>\n sprints = result.milestones\n\n @scope.totalMilestones = sprints\n @scope.totalClosedMilestones = result.closed\n @scope.totalOpenMilestones = result.open\n @scope.totalMilestones = @scope.totalOpenMilestones + @scope.totalClosedMilestones\n\n # NOTE: Fix order of USs because the filter orderBy does not work propertly in partials files\n for sprint in sprints\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\")\n\n @scope.sprints = sprints\n @scope.openSprints = _.filter(sprints, (sprint) => not sprint.closed).reverse()\n @scope.closedSprints = [] if !@scope.closedSprints\n\n @scope.sprintsCounter = sprints.length\n @scope.sprintsById = groupBy(sprints, (x) -> x.id)\n @rootscope.$broadcast(\"sprints:loaded\", sprints)\n return sprints\n\n resetFilters: ->\n selectedTags = _.filter(@scope.filters.tags, \"selected\")\n selectedStatuses = _.filter(@scope.filters.status, \"selected\")\n\n @scope.filtersQ = \"\"\n\n _.each [selectedTags, selectedStatuses], (filterGrp) =>\n _.each filterGrp, (item) =>\n filters = @scope.filters[item.type]\n filter = _.find(filters, {id: taiga.toString(item.id)})\n filter.selected = false\n\n @.unselectFilter(item.type, item.id)\n\n @.loadUserstories()\n @rootscope.$broadcast(\"filters:update\")\n\n loadUserstories: ->\n @scope.httpParams = @.getUrlFilters()\n @rs.userstories.storeQueryParams(@scope.projectId, @scope.httpParams)\n\n promise = @rs.userstories.listUnassigned(@scope.projectId, @scope.httpParams)\n\n return promise.then (userstories) =>\n # NOTE: Fix order of USs because the filter orderBy does not work propertly in the partials files\n @scope.userstories = _.sortBy(userstories, \"backlog_order\")\n\n @.setSearchDataFilters()\n\n # The broadcast must be executed when the DOM has been fully reloaded.\n # We can't assure when this exactly happens so we need a defer\n scopeDefer @scope, =>\n @scope.$broadcast(\"userstories:loaded\")\n\n return userstories\n\n loadBacklog: ->\n return @q.all([\n @.loadProjectStats(),\n @.loadSprints(),\n @.loadUserstories()\n ])\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_backlog_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.closedMilestones = !!project.total_closed_milestones\n @scope.$emit('project:loaded', project)\n @scope.points = _.sortBy(project.points, \"order\")\n @scope.pointsById = groupBy(project.points, (x) -> x.id)\n @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id)\n @scope.usStatusList = _.sortBy(project.us_statuses, \"id\")\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.initializeSubscription()\n\n return promise\n .then(=> @.loadBacklog())\n .then(=> @.generateFilters())\n .then(=> @scope.$emit(\"backlog:loaded\"))\n\n prepareBulkUpdateData: (uses, field=\"backlog_order\") ->\n return _.map(uses, (x) -> {\"us_id\": x.id, \"order\": x[field]})\n\n resortUserStories: (uses, field=\"backlog_order\") ->\n items = []\n\n for item, index in uses\n item[field] = index\n if item.isModified()\n items.push(item)\n\n return items\n\n moveUs: (ctx, usList, newUsIndex, newSprintId) ->\n oldSprintId = usList[0].milestone\n project = usList[0].project\n\n movedFromClosedSprint = false\n movedToClosedSprint = false\n\n sprint = @scope.sprintsById[oldSprintId]\n\n # Move from closed sprint\n if !sprint && @scope.closedSprintsById\n sprint = @scope.closedSprintsById[oldSprintId]\n movedFromClosedSprint = true if sprint\n\n newSprint = @scope.sprintsById[newSprintId]\n\n # Move to closed sprint\n if !newSprint && newSprintId\n newSprint = @scope.closedSprintsById[newSprintId]\n movedToClosedSprint = true if newSprint\n\n # In the same sprint or in the backlog\n if newSprintId == oldSprintId\n items = null\n userstories = null\n\n if newSprintId == null\n userstories = @scope.userstories\n else\n userstories = newSprint.user_stories\n\n @scope.$apply ->\n for us, key in usList\n r = userstories.indexOf(us)\n userstories.splice(r, 1)\n\n args = [newUsIndex, 0].concat(usList)\n Array.prototype.splice.apply(userstories, args)\n\n # If in backlog\n if newSprintId == null\n # Rehash userstories order field\n\n items = @.resortUserStories(userstories, \"backlog_order\")\n data = @.prepareBulkUpdateData(items, \"backlog_order\")\n\n # Persist in bulk all affected\n # userstories with order change\n @rs.userstories.bulkUpdateBacklogOrder(project, data).then =>\n for us in usList\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n # For sprint\n else\n # Rehash userstories order field\n items = @.resortUserStories(userstories, \"sprint_order\")\n data = @.prepareBulkUpdateData(items, \"sprint_order\")\n\n # Persist in bulk all affected\n # userstories with order change\n @rs.userstories.bulkUpdateSprintOrder(project, data).then =>\n for us in usList\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n return promise\n\n # From sprint to backlog\n if newSprintId == null\n us.milestone = null for us in usList\n\n @scope.$apply =>\n # Add new us to backlog userstories list\n # @scope.userstories.splice(newUsIndex, 0, us)\n args = [newUsIndex, 0].concat(usList)\n Array.prototype.splice.apply(@scope.userstories, args)\n\n for us, key in usList\n r = sprint.user_stories.indexOf(us)\n sprint.user_stories.splice(r, 1)\n\n # Persist the milestone change of userstory\n promise = @repo.save(us)\n\n # Rehash userstories order field\n # and persist in bulk all changes.\n promise = promise.then =>\n items = @.resortUserStories(@scope.userstories, \"backlog_order\")\n data = @.prepareBulkUpdateData(items, \"backlog_order\")\n return @rs.userstories.bulkUpdateBacklogOrder(us.project, data).then =>\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n if movedFromClosedSprint\n @rootscope.$broadcast(\"backlog:load-closed-sprints\")\n\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n return promise\n\n # From backlog to sprint\n if oldSprintId == null\n us.milestone = newSprintId for us in usList\n\n @scope.$apply =>\n args = [newUsIndex, 0].concat(usList)\n\n # Add moving us to sprint user stories list\n Array.prototype.splice.apply(newSprint.user_stories, args)\n\n # Remove moving us from backlog userstories lists.\n for us, key in usList\n r = @scope.userstories.indexOf(us)\n @scope.userstories.splice(r, 1)\n\n # From sprint to sprint\n else\n us.milestone = newSprintId for us in usList\n\n @scope.$apply =>\n args = [newUsIndex, 0].concat(usList)\n\n # Add new us to backlog userstories list\n Array.prototype.splice.apply(newSprint.user_stories, args)\n\n # Remove the us from the sprint list.\n for us in usList\n r = sprint.user_stories.indexOf(us)\n sprint.user_stories.splice(r, 1)\n\n # Persist the milestone change of userstory\n promises = _.map usList, (us) => @repo.save(us)\n\n # Rehash userstories order field\n # and persist in bulk all changes.\n promise = @q.all(promises).then =>\n items = @.resortUserStories(newSprint.user_stories, \"sprint_order\")\n data = @.prepareBulkUpdateData(items, \"sprint_order\")\n\n @rs.userstories.bulkUpdateSprintOrder(project, data).then (result) =>\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n @rs.userstories.bulkUpdateBacklogOrder(project, data).then =>\n for us in usList\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n if movedToClosedSprint || movedFromClosedSprint\n @scope.$broadcast(\"backlog:load-closed-sprints\")\n\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n return promise\n\n isFilterSelected: (type, id) ->\n if @searchdata[type]? and @searchdata[type][id]\n return true\n return false\n\n setSearchDataFilters: () ->\n urlfilters = @.getUrlFilters()\n\n if urlfilters.q\n @scope.filtersQ = @scope.filtersQ or urlfilters.q\n\n @searchdata = {}\n for name, value of urlfilters\n if not @searchdata[name]?\n @searchdata[name] = {}\n\n for val in taiga.toString(value).split(\",\")\n @searchdata[name][val] = true\n\n getUrlFilters: ->\n return _.pick(@location.search(), \"status\", \"tags\", \"q\")\n\n generateFilters: ->\n urlfilters = @.getUrlFilters()\n @scope.filters = {}\n\n loadFilters = {}\n loadFilters.project = @scope.projectId\n loadFilters.tags = urlfilters.tags\n loadFilters.status = urlfilters.status\n loadFilters.q = urlfilters.q\n loadFilters.milestone = 'null'\n\n return @rs.userstories.filtersData(loadFilters).then (data) =>\n choicesFiltersFormat = (choices, type, byIdObject) =>\n _.map choices, (t) ->\n t.type = type\n return t\n\n tagsFilterFormat = (tags) =>\n return _.map tags, (t) ->\n t.id = t.name\n t.type = 'tags'\n return t\n\n # Build filters data structure\n @scope.filters.status = choicesFiltersFormat(data.statuses, \"status\", @scope.usStatusById)\n @scope.filters.tags = tagsFilterFormat(data.tags)\n\n selectedTags = _.filter(@scope.filters.tags, \"selected\")\n selectedTags = _.map(selectedTags, \"id\")\n\n selectedStatuses = _.filter(@scope.filters.status, \"selected\")\n selectedStatuses = _.map(selectedStatuses, \"id\")\n\n @.markSelectedFilters(@scope.filters, urlfilters)\n\n #store query params\n @rs.userstories.storeQueryParams(@scope.projectId, {\n \"status\": selectedStatuses,\n \"tags\": selectedTags,\n \"project\": @scope.projectId\n \"milestone\": null\n })\n\n markSelectedFilters: (filters, urlfilters) ->\n # Build selected filters (from url) fast lookup data structure\n searchdata = {}\n for name, value of _.omit(urlfilters, \"page\", \"orderBy\")\n if not searchdata[name]?\n searchdata[name] = {}\n\n for val in \"#{value}\".split(\",\")\n searchdata[name][val] = true\n\n isSelected = (type, id) ->\n if searchdata[type]? and searchdata[type][id]\n return true\n return false\n\n for key, value of filters\n for obj in value\n obj.selected = if isSelected(obj.type, obj.id) then true else undefined\n\n ## Template actions\n\n updateUserStoryStatus: () ->\n @.setSearchDataFilters()\n @.generateFilters().then () =>\n @rootscope.$broadcast(\"filters:update\")\n @.loadProjectStats()\n\n editUserStory: (projectId, ref, $event) ->\n target = $($event.target)\n\n currentLoading = @loading()\n .target(target)\n .removeClasses(\"icon-edit\")\n .timeout(200)\n .start()\n\n @rs.userstories.getByRef(projectId, ref).then (us) =>\n @rootscope.$broadcast(\"usform:edit\", us)\n\n currentLoading.finish()\n\n deleteUserStory: (us) ->\n title = @translate.instant(\"US.TITLE_DELETE_ACTION\")\n\n message = us.subject\n\n @confirm.askOnDelete(title, message).then (askResponse) =>\n # We modify the userstories in scope so the user doesn't see the removed US for a while\n @scope.userstories = _.without(@scope.userstories, us)\n promise = @.repo.remove(us)\n promise.then =>\n askResponse.finish()\n @.loadBacklog()\n promise.then null, =>\n askResponse.finish(false)\n @confirm.notify(\"error\")\n\n addNewUs: (type) ->\n switch type\n when \"standard\" then @rootscope.$broadcast(\"usform:new\", @scope.projectId,\n @scope.project.default_us_status, @scope.usStatusList)\n when \"bulk\" then @rootscope.$broadcast(\"usform:bulk\", @scope.projectId,\n @scope.project.default_us_status)\n\n addNewSprint: () ->\n @rootscope.$broadcast(\"sprintform:create\", @scope.projectId)\n\nmodule.controller(\"BacklogController\", BacklogController)\n\n#############################################################################\n## Backlog Directive\n#############################################################################\n\nBacklogDirective = ($repo, $rootscope, $translate) ->\n ## Doom line Link\n doomLineTemplate = _.template(\"\"\"\n
<%- text %>
\n \"\"\")\n\n linkDoomLine = ($scope, $el, $attrs, $ctrl) ->\n reloadDoomLine = ->\n if $scope.stats? and $scope.stats.total_points? and $scope.stats.total_points != 0\n removeDoomlineDom()\n\n stats = $scope.stats\n\n total_points = stats.total_points\n current_sum = stats.assigned_points\n\n return if not $scope.userstories\n\n for us, i in $scope.userstories\n current_sum += us.total_points\n\n if current_sum > total_points\n domElement = $el.find('.backlog-table-body .us-item-row')[i]\n addDoomLineDom(domElement)\n\n break\n\n removeDoomlineDom = ->\n $el.find(\".doom-line\").remove()\n\n addDoomLineDom = (element) ->\n text = $translate.instant(\"BACKLOG.DOOMLINE\")\n $(element).before(doomLineTemplate({\"text\": text}))\n\n getUsItems = ->\n rowElements = $el.find('.backlog-table-body .us-item-row')\n return _.map(rowElements, (x) -> angular.element(x))\n\n $scope.$on(\"userstories:loaded\", reloadDoomLine)\n $scope.$watch \"stats\", reloadDoomLine\n\n ## Move to current sprint link\n\n linkToolbar = ($scope, $el, $attrs, $ctrl) ->\n moveToCurrentSprint = (selectedUss) ->\n ussCurrent = _($scope.userstories)\n\n # Remove them from backlog\n $scope.userstories = ussCurrent.without.apply(ussCurrent, selectedUss).value()\n\n extraPoints = _.map(selectedUss, (v, k) -> v.total_points)\n totalExtraPoints = _.reduce(extraPoints, (acc, num) -> acc + num)\n\n # Add them to current sprint\n $scope.sprints[0].user_stories = _.union($scope.sprints[0].user_stories, selectedUss)\n\n # Update the total of points\n $scope.sprints[0].total_points += totalExtraPoints\n\n $repo.saveAll(selectedUss).then ->\n $ctrl.loadSprints()\n $ctrl.loadProjectStats()\n\n\n shiftPressed = false\n lastChecked = null\n\n checkSelected = (target) ->\n lastChecked = target.closest(\".us-item-row\")\n moveToCurrentSprintDom = $el.find(\"#move-to-current-sprint\")\n selectedUsDom = $el.find(\".backlog-table-body input:checkbox:checked\")\n\n if selectedUsDom.length > 0 and $scope.sprints.length > 0\n moveToCurrentSprintDom.show()\n else\n moveToCurrentSprintDom.hide()\n\n target.closest('.us-item-row').toggleClass('ui-multisortable-multiple')\n\n $(window).on \"keydown.shift-pressed keyup.shift-pressed\", (event) ->\n shiftPressed = !!event.shiftKey\n\n return true\n\n # Enable move to current sprint only when there are selected us's\n $el.on \"change\", \".backlog-table-body input:checkbox\", (event) ->\n # check elements between the last two if shift is pressed\n if lastChecked && shiftPressed\n elements = []\n current = $(event.currentTarget).closest(\".us-item-row\")\n nextAll = lastChecked.nextAll()\n prevAll = lastChecked.prevAll()\n\n if _.some(nextAll, (next) -> next == current[0])\n elements = lastChecked.nextUntil(current)\n else if _.some(prevAll, (prev) -> prev == current[0])\n elements = lastChecked.prevUntil(current)\n\n _.map elements, (elm) ->\n input = $(elm).find(\"input:checkbox\")\n input.prop('checked', true)\n checkSelected(input)\n\n target = angular.element(event.currentTarget)\n target.closest(\".us-item-row\").toggleClass('is-checked')\n checkSelected(target)\n\n $el.on \"click\", \"#move-to-current-sprint\", (event) =>\n # Calculating the us's to be modified\n ussDom = $el.find(\".backlog-table-body input:checkbox:checked\")\n\n ussToMove = _.map ussDom, (item) ->\n item = $(item).closest('.tg-scope')\n itemScope = item.scope()\n itemScope.us.milestone = $scope.sprints[0].id\n return itemScope.us\n\n $scope.$apply(_.partial(moveToCurrentSprint, ussToMove))\n\n $el.on \"click\", \"#show-tags\", (event) ->\n event.preventDefault()\n\n $ctrl.toggleShowTags()\n\n showHideTags($ctrl)\n\n showHideTags = ($ctrl) ->\n elm = angular.element(\"#show-tags\")\n\n if $ctrl.showTags\n elm.addClass(\"active\")\n\n text = $translate.instant(\"BACKLOG.TAGS.HIDE\")\n elm.text(text)\n else\n elm.removeClass(\"active\")\n\n text = $translate.instant(\"BACKLOG.TAGS.SHOW\")\n elm.text(text)\n\n showHideFilter = ($scope, $el, $ctrl) ->\n sidebar = $el.find(\"sidebar.filters-bar\")\n sidebar.one \"transitionend\", () ->\n timeout 150, ->\n $rootscope.$broadcast(\"resize\")\n $('.burndown').css(\"visibility\", \"visible\")\n\n target = angular.element(\"#show-filters-button\")\n $('.burndown').css(\"visibility\", \"hidden\")\n sidebar.toggleClass(\"active\")\n target.toggleClass(\"active\")\n\n hideText = $translate.instant(\"BACKLOG.FILTERS.HIDE\")\n showText = $translate.instant(\"BACKLOG.FILTERS.SHOW\")\n\n toggleText(target.find(\".text\"), [hideText, showText])\n\n if !sidebar.hasClass(\"active\")\n $ctrl.resetFilters()\n\n $ctrl.toggleActiveFilters()\n\n ## Filters Link\n\n linkFilters = ($scope, $el, $attrs, $ctrl) ->\n $scope.filtersSearch = {}\n $el.on \"click\", \"#show-filters-button\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n showHideFilter($scope, $el, $ctrl)\n\n link = ($scope, $el, $attrs, $rootscope) ->\n $ctrl = $el.controller()\n\n linkToolbar($scope, $el, $attrs, $ctrl)\n linkFilters($scope, $el, $attrs, $ctrl)\n linkDoomLine($scope, $el, $attrs, $ctrl)\n\n $el.find(\".backlog-table-body\").disableSelection()\n\n filters = $ctrl.getUrlFilters()\n if filters.status ||\n filters.tags ||\n filters.q\n showHideFilter($scope, $el, $ctrl)\n\n $scope.$on \"showTags\", () ->\n showHideTags($ctrl)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n $(window).off(\".shift-pressed\")\n\n return {link: link}\n\n\nmodule.directive(\"tgBacklog\", [\"$tgRepo\", \"$rootScope\", \"$translate\", BacklogDirective])\n\n#############################################################################\n## User story points directive\n#############################################################################\n\nUsRolePointsSelectorDirective = ($rootscope, $template, $compile, $translate) ->\n selectionTemplate = $template.get(\"backlog/us-role-points-popover.html\", true)\n\n link = ($scope, $el, $attrs) ->\n # Watchers\n bindOnce $scope, \"project\", (project) ->\n roles = _.filter(project.roles, \"computable\")\n numberOfRoles = _.size(roles)\n\n if numberOfRoles > 1\n $el.append($compile(selectionTemplate({\"roles\": roles}))($scope))\n else\n $el.find(\".icon-arrow-bottom\").remove()\n $el.find(\".header-points\").addClass(\"not-clickable\")\n\n $scope.$on \"uspoints:select\", (ctx, roleId, roleName) ->\n $el.find(\".popover\").popover().close()\n $el.find(\".header-points\").html(\"#{roleName}/Total\")\n\n $scope.$on \"uspoints:clear-selection\", (ctx, roleId) ->\n $el.find(\".popover\").popover().close()\n\n text = $translate.instant(\"COMMON.FIELDS.POINTS\")\n $el.find(\".header-points\").text(text)\n\n # Dom Event Handlers\n $el.on \"click\", (event) ->\n target = angular.element(event.target)\n\n if target.is(\"span\") or target.is(\"div\")\n event.stopPropagation()\n\n $el.find(\".popover\").popover().open()\n\n $el.on \"click\", \".clear-selection\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n $rootscope.$broadcast(\"uspoints:clear-selection\")\n\n $el.on \"click\", \".role\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n rolScope = target.scope()\n $rootscope.$broadcast(\"uspoints:select\", target.data(\"role-id\"), target.text())\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgUsRolePointsSelector\", [\"$rootScope\", \"$tgTemplate\", \"$compile\", UsRolePointsSelectorDirective])\n\n\nUsPointsDirective = ($tgEstimationsService, $repo, $tgTemplate) ->\n rolesTemplate = $tgTemplate.get(\"common/estimation/us-points-roles-popover.html\", true)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n updatingSelectedRoleId = null\n selectedRoleId = null\n filteringRoleId = null\n estimationProcess = null\n\n $scope.$on \"uspoints:select\", (ctx, roleId, roleName) ->\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n selectedRoleId = roleId\n estimationProcess.render()\n\n $scope.$on \"uspoints:clear-selection\", (ctx) ->\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n selectedRoleId = null\n estimationProcess.render()\n\n $scope.$watch $attrs.tgBacklogUsPoints, (us) ->\n if us\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project)\n\n # Update roles\n roles = estimationProcess.calculateRoles()\n if roles.length == 0\n $el.find(\".icon-arrow-bottom\").remove()\n $el.find(\"a.us-points\").addClass(\"not-clickable\")\n\n else if roles.length == 1\n # Preselect the role if we have only one\n selectedRoleId = _.keys(us.points)[0]\n\n if estimationProcess.isEditable\n bindClickElements()\n\n estimationProcess.onSelectedPointForRole = (roleId, pointId) ->\n @save(roleId, pointId).then ->\n $ctrl.loadProjectStats()\n\n estimationProcess.render = () ->\n totalPoints = @calculateTotalPoints()\n if not selectedRoleId? or roles.length == 1\n text = totalPoints\n title = totalPoints\n else\n pointId = @us.points[selectedRoleId]\n pointObj = @pointsById[pointId]\n text = \"#{pointObj.name} / #{totalPoints}\"\n title = \"#{pointObj.name} / #{totalPoints}\"\n\n ctx = {\n totalPoints: totalPoints\n roles: @calculateRoles()\n editable: @isEditable\n text: text\n title: title\n }\n mainTemplate = \"common/estimation/us-estimation-total.html\"\n template = $tgTemplate.get(mainTemplate, true)\n html = template(ctx)\n @$el.html(html)\n\n estimationProcess.render()\n\n renderRolesSelector = () ->\n roles = estimationProcess.calculateRoles()\n html = rolesTemplate({\"roles\": roles})\n # Render into DOM and show the new created element\n $el.append(html)\n $el.find(\".pop-role\").popover().open(() -> $(this).remove())\n\n bindClickElements = () ->\n $el.on \"click\", \"a.us-points span\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n updatingSelectedRoleId = selectedRoleId\n if selectedRoleId?\n estimationProcess.renderPointsSelector(selectedRoleId)\n else\n renderRolesSelector()\n\n $el.on \"click\", \".role\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n updatingSelectedRoleId = target.data(\"role-id\")\n popRolesDom = $el.find(\".pop-role\")\n popRolesDom.find(\"a\").removeClass(\"active\")\n popRolesDom.find(\"a[data-role-id='#{updatingSelectedRoleId}']\").addClass(\"active\")\n estimationProcess.renderPointsSelector(updatingSelectedRoleId)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBacklogUsPoints\", [\"$tgEstimationsService\", \"$tgRepo\", \"$tgTemplate\", UsPointsDirective])\n\n\n#############################################################################\n## Burndown graph directive\n#############################################################################\nToggleBurndownVisibility = ($storage) ->\n hide = () ->\n $(\".js-burndown-graph\").removeClass(\"shown\")\n $(\".js-toggle-burndown-visibility-button\").removeClass(\"active\")\n $(\".js-burndown-graph\").removeClass(\"open\")\n\n show = (firstLoad) ->\n $(\".js-toggle-burndown-visibility-button\").addClass(\"active\")\n\n if firstLoad\n $(\".js-burndown-graph\").addClass(\"shown\")\n else\n $(\".js-burndown-graph\").addClass(\"open\")\n\n link = ($scope, $el, $attrs) ->\n firstLoad = true\n hash = generateHash([\"is-burndown-grpahs-collapsed\"])\n $scope.isBurndownGraphCollapsed = $storage.get(hash) or false\n\n toggleGraph = ->\n if $scope.isBurndownGraphCollapsed\n hide(firstLoad)\n else\n show(firstLoad)\n\n firstLoad = false\n\n $scope.$watch \"showGraphPlaceholder\", () ->\n if $scope.showGraphPlaceholder?\n $scope.isBurndownGraphCollapsed = $scope.isBurndownGraphCollapsed || $scope.showGraphPlaceholder\n toggleGraph()\n\n $el.on \"click\", \".js-toggle-burndown-visibility-button\", ->\n $scope.isBurndownGraphCollapsed = !$scope.isBurndownGraphCollapsed\n $storage.set(hash, $scope.isBurndownGraphCollapsed)\n toggleGraph()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n }\n\nmodule.directive(\"tgToggleBurndownVisibility\", [\"$tgStorage\", ToggleBurndownVisibility])\n\n\n#############################################################################\n## Burndown graph directive\n#############################################################################\n\nBurndownBacklogGraphDirective = ($translate) ->\n redrawChart = (element, dataToDraw) ->\n width = element.width()\n element.height(width/6)\n milestonesRange = [0..(dataToDraw.milestones.length - 1)]\n data = []\n zero_line = _.map(dataToDraw.milestones, (ml) -> 0)\n data.push({\n data: _.zip(milestonesRange, zero_line)\n lines:\n fillColor : \"rgba(0,0,0,0)\"\n points:\n show: false\n })\n optimal_line = _.map(dataToDraw.milestones, (ml) -> ml.optimal)\n data.push({\n data: _.zip(milestonesRange, optimal_line)\n lines:\n fillColor : \"rgba(120,120,120,0.2)\"\n })\n evolution_line = _.filter(_.map(dataToDraw.milestones, (ml) -> ml.evolution), (evolution) -> evolution?)\n data.push({\n data: _.zip(milestonesRange, evolution_line)\n lines:\n fillColor : \"rgba(102,153,51,0.3)\"\n })\n team_increment_line = _.map(dataToDraw.milestones, (ml) -> -ml[\"team-increment\"])\n data.push({\n data: _.zip(milestonesRange, team_increment_line)\n lines:\n fillColor : \"rgba(153,51,51,0.3)\"\n })\n client_increment_line = _.map dataToDraw.milestones, (ml) ->\n -ml[\"team-increment\"] - ml[\"client-increment\"]\n data.push({\n data: _.zip(milestonesRange, client_increment_line)\n lines:\n fillColor : \"rgba(255,51,51,0.3)\"\n })\n\n colors = [\n \"rgba(0,0,0,1)\"\n \"rgba(120,120,120,0.2)\"\n \"rgba(102,153,51,1)\"\n \"rgba(153,51,51,1)\"\n \"rgba(255,51,51,1)\"\n ]\n\n options = {\n grid: {\n borderWidth: { top: 0, right: 1, left:0, bottom: 0 }\n borderColor: \"#ccc\"\n hoverable: true\n }\n xaxis: {\n ticks: dataToDraw.milestones.length\n axisLabel: $translate.instant(\"BACKLOG.CHART.XAXIS_LABEL\"),\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\"\n axisLabelPadding: 5\n tickFormatter: (val, axis) -> \"\"\n }\n yaxis: {\n axisLabel: $translate.instant(\"BACKLOG.CHART.YAXIS_LABEL\"),\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\"\n axisLabelPadding: 5\n }\n series: {\n shadowSize: 0\n lines: {\n show: true\n fill: true\n }\n points: {\n show: true\n fill: true\n radius: 4\n lineWidth: 2\n }\n }\n colors: colors\n tooltip: true\n tooltipOpts: {\n content: (label, xval, yval, flotItem) ->\n if flotItem.seriesIndex == 1\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.OPTIMAL\", ctx)\n else if flotItem.seriesIndex == 2\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.REAL\", ctx)\n else if flotItem.seriesIndex == 3\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_TEAM\", ctx)\n else\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_CLIENT\", ctx)\n }\n }\n\n element.empty()\n element.plot(data, options).data(\"plot\")\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$watch \"stats\", (value) ->\n if $scope.stats?\n redrawChart(element, $scope.stats)\n\n $scope.$on \"resize\", ->\n redrawChart(element, $scope.stats)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBurndownBacklogGraph\", [\"$translate\", BurndownBacklogGraphDirective])\n\n\n#############################################################################\n## Backlog progress bar directive\n#############################################################################\n\nTgBacklogProgressBarDirective = ($template, $compile) ->\n template = $template.get(\"backlog/progress-bar.html\", true)\n\n render = (scope, el, projectPointsPercentaje, closedPointsPercentaje) ->\n html = template({\n projectPointsPercentaje: projectPointsPercentaje,\n closedPointsPercentaje:closedPointsPercentaje\n })\n html = $compile(html)(scope)\n el.html(html)\n\n adjustPercentaje = (percentage) ->\n adjusted = _.max([0 , percentage])\n adjusted = _.min([100, adjusted])\n return Math.round(adjusted)\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$watch $attrs.tgBacklogProgressBar, (stats) ->\n if stats?\n totalPoints = if stats.total_points then stats.total_points else stats.defined_points\n definedPoints = stats.defined_points\n closedPoints = stats.closed_points\n if definedPoints > totalPoints\n projectPointsPercentaje = totalPoints * 100 / definedPoints\n closedPointsPercentaje = closedPoints * 100 / definedPoints\n else\n projectPointsPercentaje = 100\n closedPointsPercentaje = closedPoints * 100 / totalPoints\n\n projectPointsPercentaje = adjustPercentaje(projectPointsPercentaje - 3)\n closedPointsPercentaje = adjustPercentaje(closedPointsPercentaje - 3)\n render($scope, $el, projectPointsPercentaje, closedPointsPercentaje)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBacklogProgressBar\", [\"$tgTemplate\", \"$compile\", TgBacklogProgressBarDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/sortable.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\n\nmodule = angular.module(\"taigaBacklog\")\n\n\n#############################################################################\n## Sortable Directive\n#############################################################################\n\ndeleteElement = (el) ->\n el.scope().$destroy()\n el.off()\n el.remove()\n\nBacklogSortableDirective = ($repo, $rs, $rootscope, $tgConfirm, $translate) ->\n # Notes about jquery bug:\n # http://stackoverflow.com/questions/5791886/jquery-draggable-shows-\n # helper-in-wrong-place-when-scrolled-down-page\n\n link = ($scope, $el, $attrs) ->\n getUsIndex = (us) =>\n return $(us).index(\".backlog-table-body .row\")\n\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if not (project.my_permissions.indexOf(\"modify_us\") > -1)\n return\n\n filterError = ->\n text = $translate.instant(\"BACKLOG.SORTABLE_FILTER_ERROR\")\n $tgConfirm.notify(\"error\", text)\n\n $el.sortable({\n items: \".us-item-row\",\n cancel: \".popover\"\n connectWith: \".sprint\"\n dropOnEmpty: true\n placeholder: \"row us-item-row us-item-drag sortable-placeholder\"\n scroll: true\n disableHorizontalScroll: true\n # A consequence of length of backlog user story item\n # the default tolerance (\"intersection\") not works properly.\n tolerance: \"pointer\"\n # Revert on backlog is disabled bacause it works bad. Something\n # on the current taiga backlog structure or style makes jquery ui\n # works unexpectly (in some circumstances calculates wrong\n # position for revert).\n revert: false\n start: () ->\n $(document.body).addClass(\"drag-active\")\n stop: () ->\n $(document.body).removeClass(\"drag-active\")\n\n if $el.hasClass(\"active-filters\")\n $el.sortable(\"cancel\")\n filterError()\n })\n\n $el.on \"multiplesortreceive\", (event, ui) ->\n if $el.hasClass(\"active-filters\")\n ui.source.sortable(\"cancel\")\n filterError()\n\n return\n\n itemUs = ui.item.scope().us\n itemIndex = getUsIndex(ui.item)\n\n deleteElement(ui.item)\n\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, null)\n ui.item.find('a').removeClass('noclick')\n\n $el.on \"multiplesortstop\", (event, ui) ->\n # When parent not exists, do nothing\n if $(ui.items[0]).parent().length == 0\n return\n\n if $el.hasClass(\"active-filters\")\n return\n\n items = _.sortBy ui.items, (item) ->\n return $(item).index()\n\n index = _.min _.map items, (item) ->\n return getUsIndex(item)\n\n us = _.map items, (item) ->\n item = $(item)\n itemUs = item.scope().us\n\n # HACK: setTimeout prevents that firefox click\n # event fires just after drag ends\n setTimeout ( =>\n item.find('a').removeClass('noclick')\n ), 300\n\n return itemUs\n\n $scope.$emit(\"sprint:us:move\", us, index, null)\n\n $el.on \"sortstart\", (event, ui) ->\n ui.item.find('a').addClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nBacklogEmptySortableDirective = ($repo, $rs, $rootscope) ->\n # Notes about jquery bug:\n # http://stackoverflow.com/questions/5791886/jquery-draggable-shows-\n # helper-in-wrong-place-when-scrolled-down-page\n\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if project.my_permissions.indexOf(\"modify_us\") > -1\n $el.sortable({\n items: \".us-item-row\",\n dropOnEmpty: true\n })\n\n $el.on \"sortreceive\", (event, ui) ->\n itemUs = ui.item.scope().us\n itemIndex = ui.item.index()\n\n deleteElement(ui.item)\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, null)\n\n ui.item.find('a').removeClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nSprintSortableDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if project.my_permissions.indexOf(\"modify_us\") > -1\n $el.sortable({\n scroll: true\n dropOnEmpty: true\n items: \".sprint-table .milestone-us-item-row\"\n disableHorizontalScroll: true\n connectWith: \".sprint,.backlog-table-body,.empty-backlog\"\n placeholder: \"row us-item-row sortable-placeholder\"\n forcePlaceholderSize:true\n })\n\n $el.on \"multiplesortreceive\", (event, ui) ->\n items = _.sortBy ui.items, (item) ->\n return $(item).index()\n\n index = _.min _.map items, (item) ->\n return $(item).index()\n\n us = _.map items, (item) ->\n item = $(item)\n itemUs = item.scope().us\n\n deleteElement(item)\n\n return itemUs\n\n $scope.$emit(\"sprint:us:move\", us, index, $scope.sprint.id)\n\n $el.on \"multiplesortstop\", (event, ui) ->\n # When parent not exists, do nothing\n if ui.item.parent().length == 0\n return\n\n itemUs = ui.item.scope().us\n itemIndex = ui.item.index()\n\n # HACK: setTimeout prevents that firefox click\n # event fires just after drag ends\n setTimeout ( =>\n ui.item.find('a').removeClass('noclick')\n ), 300\n\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, $scope.sprint.id)\n\n $el.on \"sortstart\", (event, ui) ->\n ui.item.find('a').addClass('noclick')\n\n return {link:link}\n\n\nmodule.directive(\"tgBacklogSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n \"$tgConfirm\",\n \"$translate\",\n BacklogSortableDirective\n])\n\nmodule.directive(\"tgBacklogEmptySortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n BacklogEmptySortableDirective\n])\n\nmodule.directive(\"tgSprintSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n SprintSortableDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/sprints.coffee\n###\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaBacklog\")\n\n\n#############################################################################\n## Sprint Actions Directive\n#############################################################################\n\nBacklogSprintDirective = ($repo, $rootscope) ->\n sprintTableMinHeight = 50\n slideOptions = {\n duration: 500,\n easing: 'linear'\n }\n\n toggleSprint = ($el) =>\n sprintTable = $el.find(\".sprint-table\")\n sprintArrow = $el.find(\".icon-arrow-up\")\n\n sprintArrow.toggleClass('active')\n sprintTable.toggleClass('open')\n\n link = ($scope, $el, $attrs) ->\n $scope.$watch $attrs.tgBacklogSprint, (sprint) ->\n sprint = $scope.$eval($attrs.tgBacklogSprint)\n\n if sprint.closed\n $el.addClass(\"sprint-closed\")\n else\n toggleSprint($el)\n\n # Event Handlers\n $el.on \"click\", \".sprint-name > .icon-arrow-up\", (event) ->\n event.preventDefault()\n\n toggleSprint($el)\n\n $el.find(\".sprint-table\").slideToggle(slideOptions)\n\n $el.on \"click\", \".sprint-name > .icon-edit\", (event) ->\n event.preventDefault()\n\n sprint = $scope.$eval($attrs.tgBacklogSprint)\n $rootscope.$broadcast(\"sprintform:edit\", sprint)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBacklogSprint\", [\"$tgRepo\", \"$rootScope\", BacklogSprintDirective])\n\n\n#############################################################################\n## Sprint Header Directive\n#############################################################################\n\nBacklogSprintHeaderDirective = ($navUrls, $template, $compile, $translate) ->\n template = $template.get(\"backlog/sprint-header.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\")\n\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_milestone\") != -1\n\n isVisible = ->\n return $scope.project.my_permissions.indexOf(\"view_milestones\") != -1\n\n render = (sprint) ->\n taskboardUrl = $navUrls.resolve(\"project-taskboard\",\n {project: $scope.project.slug, sprint: sprint.slug})\n\n start = moment(sprint.estimated_start).format(prettyDate)\n finish = moment(sprint.estimated_finish).format(prettyDate)\n estimatedDateRange = \"#{start}-#{finish}\"\n\n ctx = {\n name: sprint.name\n taskboardUrl: taskboardUrl\n estimatedDateRange: estimatedDateRange\n closedPoints: sprint.closed_points or 0\n totalPoints: sprint.total_points or 0\n isVisible: isVisible()\n isEditable: isEditable()\n }\n\n templateScope = $scope.$new()\n\n _.assign(templateScope, ctx)\n\n compiledTemplate = $compile(template)(templateScope)\n $el.html(compiledTemplate)\n\n $scope.$watch $attrs.ngModel, (sprint) ->\n render(sprint)\n\n $scope.$on \"sprintform:edit:success\", ->\n render($model.$modelValue)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgBacklogSprintHeader\", [\"$tgNavUrls\", \"$tgTemplate\", \"$compile\", \"$translate\"\n BacklogSprintHeaderDirective])\n\n\n#############################################################################\n## Toggle Closed Sprints Directive\n#############################################################################\n\nToggleExcludeClosedSprintsVisualization = ($rootscope, $loading, $translate) ->\n excludeClosedSprints = true\n\n link = ($scope, $el, $attrs) ->\n # insert loading wrapper\n loadingElm = $(\"
\")\n $el.after(loadingElm)\n\n currentLoading = null\n\n # Event Handlers\n $el.on \"click\", (event) ->\n event.preventDefault()\n excludeClosedSprints = not excludeClosedSprints\n\n currentLoading = $loading()\n .target(loadingElm)\n .start()\n\n if excludeClosedSprints\n $rootscope.$broadcast(\"backlog:unload-closed-sprints\")\n else\n $rootscope.$broadcast(\"backlog:load-closed-sprints\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $scope.$on \"closed-sprints:reloaded\", (ctx, sprints) =>\n currentLoading.finish()\n\n if sprints.length > 0\n key = \"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS\"\n else\n key = \"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS\"\n\n text = $translate.instant(key)\n\n $el.find(\".text\").text(text)\n\n return {link: link}\n\nmodule.directive(\"tgBacklogToggleClosedSprintsVisualization\", [\"$rootScope\", \"$tgLoading\", \"$translate\",\n ToggleExcludeClosedSprintsVisualization])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard/charts.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaTaskboard\")\n\n#############################################################################\n## Sprint burndown graph directive\n#############################################################################\n\nSprintGraphDirective = ($translate)->\n redrawChart = (element, dataToDraw) ->\n width = element.width()\n element.height(240)\n\n days = _.map(dataToDraw, (x) -> moment(x.day))\n\n data = []\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, (d) -> d.optimal_points))\n lines:\n fillColor : \"rgba(120,120,120,0.2)\"\n })\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, (d) -> d.open_points))\n lines:\n fillColor : \"rgba(102,153,51,0.3)\"\n })\n\n options =\n grid:\n borderWidth: { top: 0, right: 1, left:0, bottom: 0 }\n borderColor: '#ccc'\n hoverable: true\n xaxis:\n tickSize: [1, \"day\"]\n min: days[0]\n max: _.last(days)\n mode: \"time\"\n daysNames: days\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.XAXIS_LABEL\")\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif'\n axisLabelPadding: 5\n yaxis:\n min: 0\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.YAXIS_LABEL\")\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif'\n axisLabelPadding: 5\n series:\n shadowSize: 0\n lines:\n show: true\n fill: true\n points:\n show: true\n fill: true\n radius: 4\n lineWidth: 2\n colors: [\"rgba(102,153,51,1)\", \"rgba(120,120,120,0.2)\"]\n tooltip: true\n tooltipOpts:\n content: (label, xval, yval, flotItem) ->\n formattedDate = moment(xval).format($translate.instant(\"TASKBOARD.CHARTS.DATE\"))\n roundedValue = Math.round(yval)\n\n if flotItem.seriesIndex == 1\n return $translate.instant(\"TASKBOARD.CHARTS.OPTIMAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n })\n\n else\n return $translate.instant(\"TASKBOARD.CHARTS.REAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n })\n\n element.empty()\n element.plot(data, options).data(\"plot\")\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$on \"resize\", ->\n redrawChart(element, $scope.stats.days) if $scope.stats\n\n $scope.$on \"taskboard:graph:toggle-visibility\", ->\n $el.parent().toggleClass('open')\n\n # fix chart overflow\n timeout(100, ->\n redrawChart(element, $scope.stats.days) if $scope.stats\n )\n\n $scope.$watch 'stats', (value) ->\n if not $scope.stats?\n return\n redrawChart(element, $scope.stats.days)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgSprintGraph\", [\"$translate\", SprintGraphDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nCreateEditTaskDirective = ($repo, $model, $rs, $rootscope, $loading, lightboxService, $translate) ->\n link = ($scope, $el, attrs) ->\n $scope.isNew = true\n\n $scope.$on \"taskform:new\", (ctx, sprintId, usId) ->\n $scope.task = {\n project: $scope.projectId\n milestone: sprintId\n user_story: usId\n is_archived: false\n status: $scope.project.default_task_status\n assigned_to: null\n tags: []\n }\n $scope.isNew = true\n\n # Update texts for creation\n create = $translate.instant(\"COMMON.CREATE\")\n $el.find(\".button-green\").html(create)\n\n newTask = $translate.instant(\"LIGHTBOX.CREATE_EDIT_TASK.TITLE\")\n $el.find(\".title\").html(newTask + \" \")\n\n $el.find(\".tag-input\").val(\"\")\n lightboxService.open($el)\n\n $scope.$on \"taskform:edit\", (ctx, task) ->\n $scope.task = task\n $scope.isNew = false\n\n # Update texts for edition\n save = $translate.instant(\"COMMON.SAVE\")\n edit = $translate.instant(\"LIGHTBOX.CREATE_EDIT_TASK.ACTION_EDIT\")\n\n $el.find(\".button-green\").html(save)\n $el.find(\".title\").html(edit + \" \")\n\n $el.find(\".tag-input\").val(\"\")\n lightboxService.open($el)\n\n\n submitButton = $el.find(\".submit-button\")\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n if $scope.isNew\n promise = $repo.create(\"tasks\", $scope.task)\n broadcastEvent = \"taskform:new:success\"\n else\n promise = $repo.save($scope.task)\n broadcastEvent = \"taskform:edit:success\"\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n # FIXME: error handling?\n promise.then (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $rootscope.$broadcast(broadcastEvent, data)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nCreateBulkTasksDirective = ($repo, $rs, $rootscope, $loading, lightboxService) ->\n link = ($scope, $el, attrs) ->\n $scope.form = {data: \"\", usId: null}\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n data = $scope.form.data\n projectId = $scope.projectId\n sprintId = $scope.form.sprintId\n usId = $scope.form.usId\n\n promise = $rs.tasks.bulkCreate(projectId, sprintId, usId, data)\n promise.then (result) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"taskform:bulk:success\", result)\n lightboxService.close($el)\n\n # TODO: error handling\n promise.then null, ->\n currentLoading.finish()\n console.log \"FAIL\"\n\n $scope.$on \"taskform:bulk\", (ctx, sprintId, usId)->\n lightboxService.open($el)\n $scope.form = {data: \"\", sprintId: sprintId, usId: usId}\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule = angular.module(\"taigaTaskboard\")\n\nmodule.directive(\"tgLbCreateEditTask\", [\n \"$tgRepo\",\n \"$tgModel\",\n \"$tgResources\",\n \"$rootScope\",\n \"$tgLoading\",\n \"lightboxService\",\n \"$translate\"\n CreateEditTaskDirective\n])\n\nmodule.directive(\"tgLbCreateBulkTasks\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n \"$tgLoading\",\n \"lightboxService\",\n CreateBulkTasksDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard.coffee\n###\n\ntaiga = @.taiga\ntoggleText = @.taiga.toggleText\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nscopeDefer = @.taiga.scopeDefer\ntimeout = @.taiga.timeout\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaTaskboard\")\n\n\n#############################################################################\n## Taskboard Controller\n#############################################################################\n\nclass TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"tgAppMetaService\",\n \"$tgLocation\",\n \"$tgNavUrls\"\n \"$tgEvents\"\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @appMetaService, @location, @navUrls,\n @events, @analytics, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"TASKBOARD.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then => @._setMeta()\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n prettyDate = @translate.instant(\"BACKLOG.SPRINTS.DATE\")\n\n title = @translate.instant(\"TASKBOARD.PAGE_TITLE\", {\n projectName: @scope.project.name\n sprintName: @scope.sprint.name\n })\n description = @translate.instant(\"TASKBOARD.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name\n sprintName: @scope.sprint.name\n startDate: moment(@scope.sprint.estimated_start).format(prettyDate)\n endDate: moment(@scope.sprint.estimated_finish).format(prettyDate)\n completedPercentage: @scope.stats.completedPercentage or \"0\"\n completedPoints: @scope.stats.completedPointsSum or \"--\"\n totalPoints: @scope.stats.totalPointsSum or \"--\"\n openTasks: @scope.stats.openTasks or \"--\"\n totalTasks: @scope.stats.total_tasks or \"--\"\n })\n\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n # TODO: Reload entire taskboard after create/edit tasks seems\n # a big overhead. It should be optimized in near future.\n @scope.$on \"taskform:bulk:success\", =>\n @.loadTaskboard()\n @analytics.trackEvent(\"task\", \"create\", \"bulk create task on taskboard\", 1)\n\n @scope.$on \"taskform:new:success\", =>\n @.loadTaskboard()\n @analytics.trackEvent(\"task\", \"create\", \"create task on taskboard\", 1)\n\n @scope.$on(\"taskform:edit:success\", => @.loadTaskboard())\n @scope.$on(\"taskboard:task:move\", @.taskMove)\n\n @scope.$on \"assigned-to:added\", (ctx, userId, task) =>\n task.assigned_to = userId\n promise = @repo.save(task)\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n initializeSubscription: ->\n routingKey = \"changes.project.#{@scope.projectId}.tasks\"\n @events.subscribe @scope, routingKey, (message) =>\n @.loadTaskboard()\n\n routingKey1 = \"changes.project.#{@scope.projectId}.userstories\"\n @events.subscribe @scope, routingKey1, (message) =>\n @.refreshTagsColors()\n @.loadSprintStats()\n @.loadSprint()\n\n loadProject: ->\n return @rs.projects.get(@scope.projectId).then (project) =>\n if not project.is_backlog_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.project = project\n # Not used at this momment\n @scope.pointsList = _.sortBy(project.points, \"order\")\n # @scope.roleList = _.sortBy(project.roles, \"order\")\n @scope.pointsById = groupBy(project.points, (e) -> e.id)\n @scope.roleById = groupBy(project.roles, (e) -> e.id)\n @scope.taskStatusList = _.sortBy(project.task_statuses, \"order\")\n @scope.usStatusList = _.sortBy(project.us_statuses, \"order\")\n @scope.usStatusById = groupBy(project.us_statuses, (e) -> e.id)\n\n @scope.$emit('project:loaded', project)\n\n @.fillUsersAndRoles(project.members, project.roles)\n\n return project\n\n loadSprintStats: ->\n return @rs.sprints.stats(@scope.projectId, @scope.sprintId).then (stats) =>\n totalPointsSum =_.reduce(_.values(stats.total_points), ((res, n) -> res + n), 0)\n completedPointsSum = _.reduce(_.values(stats.completed_points), ((res, n) -> res + n), 0)\n remainingPointsSum = totalPointsSum - completedPointsSum\n remainingTasks = stats.total_tasks - stats.completed_tasks\n @scope.stats = stats\n @scope.stats.totalPointsSum = totalPointsSum\n @scope.stats.completedPointsSum = completedPointsSum\n @scope.stats.remainingPointsSum = remainingPointsSum\n @scope.stats.remainingTasks = remainingTasks\n if stats.totalPointsSum\n @scope.stats.completedPercentage = Math.round(100*stats.completedPointsSum/stats.totalPointsSum)\n else\n @scope.stats.completedPercentage = 0\n\n @scope.stats.openTasks = stats.total_tasks - stats.completed_tasks\n return stats\n\n refreshTagsColors: ->\n return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) =>\n @scope.project.tags_colors = tags_colors\n\n loadSprint: ->\n return @rs.sprints.get(@scope.projectId, @scope.sprintId).then (sprint) =>\n @scope.sprint = sprint\n @scope.userstories = _.sortBy(sprint.user_stories, \"sprint_order\")\n return sprint\n\n loadTasks: ->\n return @rs.tasks.list(@scope.projectId, @scope.sprintId).then (tasks) =>\n @scope.tasks = _.sortBy(tasks, 'taskboard_order')\n @scope.usTasks = {}\n\n # Iterate over all userstories and\n # null userstory for unassigned tasks\n for us in _.union(@scope.userstories, [{id:null}])\n @scope.usTasks[us.id] = {}\n for status in @scope.taskStatusList\n @scope.usTasks[us.id][status.id] = []\n\n for task in @scope.tasks\n if @scope.usTasks[task.user_story]? and @scope.usTasks[task.user_story][task.status]?\n @scope.usTasks[task.user_story][task.status].push(task)\n\n if tasks.length == 0\n \n if @scope.userstories.length > 0\n usId = @scope.userstories[0].id\n else\n usId = null\n\n @scope.usTasks[usId][@scope.taskStatusList[0].id].push({isPlaceholder: true})\n\n return tasks\n\n loadTaskboard: ->\n return @q.all([\n @.refreshTagsColors(),\n @.loadSprintStats(),\n @.loadSprint().then(=> @.loadTasks())\n ])\n\n loadInitialData: ->\n params = {\n pslug: @params.pslug\n sslug: @params.sslug\n }\n\n promise = @repo.resolve(params).then (data) =>\n @scope.projectId = data.project\n @scope.sprintId = data.milestone\n @.initializeSubscription()\n return data\n\n return promise.then(=> @.loadProject())\n .then(=> @.loadTaskboard())\n\n refreshTasksOrder: (tasks) ->\n items = @.resortTasks(tasks)\n data = @.prepareBulkUpdateData(items)\n\n return @rs.tasks.bulkUpdateTaskTaskboardOrder(@scope.project.id, data)\n\n resortTasks: (tasks) ->\n items = []\n\n for item, index in tasks\n item[\"taskboard_order\"] = index\n if item.isModified()\n items.push(item)\n\n return items\n\n prepareBulkUpdateData: (uses) ->\n return _.map(uses, (x) -> {\"task_id\": x.id, \"order\": x[\"taskboard_order\"]})\n\n taskMove: (ctx, task, usId, statusId, order) ->\n # Remove task from old position\n r = @scope.usTasks[task.user_story][task.status].indexOf(task)\n @scope.usTasks[task.user_story][task.status].splice(r, 1)\n\n # Add task to new position\n tasks = @scope.usTasks[usId][statusId]\n tasks.splice(order, 0, task)\n\n task.user_story = usId\n task.status = statusId\n task.taskboard_order = order\n\n promise = @repo.save(task)\n\n @rootscope.$broadcast(\"sprint:task:moved\", task)\n\n promise.then =>\n @.refreshTasksOrder(tasks)\n @.loadSprintStats()\n\n promise.then null, =>\n console.log \"FAIL TASK SAVE\"\n\n ## Template actions\n addNewTask: (type, us) ->\n switch type\n when \"standard\" then @rootscope.$broadcast(\"taskform:new\", @scope.sprintId, us?.id)\n when \"bulk\" then @rootscope.$broadcast(\"taskform:bulk\", @scope.sprintId, us?.id)\n\n editTaskAssignedTo: (task) ->\n @rootscope.$broadcast(\"assigned-to:add\", task)\n\nmodule.controller(\"TaskboardController\", TaskboardController)\n\n\n#############################################################################\n## TaskboardDirective\n#############################################################################\n\nTaskboardDirective = ($rootscope) ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $el.on \"click\", \".toggle-analytics-visibility\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.toggleClass('active')\n $rootscope.$broadcast(\"taskboard:graph:toggle-visibility\")\n\n tableBodyDom = $el.find(\".taskboard-table-body\")\n tableBodyDom.on \"scroll\", (event) ->\n target = angular.element(event.currentTarget)\n tableHeaderDom = $el.find(\".taskboard-table-header .taskboard-table-inner\")\n tableHeaderDom.css(\"left\", -1 * target.scrollLeft())\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgTaskboard\", [\"$rootScope\", TaskboardDirective])\n\n\n#############################################################################\n## Taskboard Task Directive\n#############################################################################\n\nTaskboardTaskDirective = ($rootscope, $loading, $rs) ->\n link = ($scope, $el, $attrs, $model) ->\n $el.disableSelection()\n\n $scope.$watch \"task\", (task) ->\n if task.is_blocked and not $el.hasClass(\"blocked\")\n $el.addClass(\"blocked\")\n else if not task.is_blocked and $el.hasClass(\"blocked\")\n $el.removeClass(\"blocked\")\n\n $el.find(\".icon-edit\").on \"click\", (event) ->\n if $el.find('.icon-edit').hasClass('noclick')\n return\n $scope.$apply ->\n target = $(event.target)\n\n currentLoading = $loading()\n .target(target)\n .timeout(200)\n .removeClasses(\"icon-edit\")\n .start()\n\n task = $scope.task\n $rs.tasks.getByRef(task.project, task.ref).then (editingTask) =>\n $rootscope.$broadcast(\"taskform:edit\", editingTask)\n currentLoading.finish()\n\n return {link:link}\n\n\nmodule.directive(\"tgTaskboardTask\", [\"$rootScope\", \"$tgLoading\", \"$tgResources\", TaskboardTaskDirective])\n\n#############################################################################\n## Taskboard Squish Column Directive\n#############################################################################\n\nTaskboardSquishColumnDirective = (rs) ->\n avatarWidth = 40\n maxColumnWidth = 300\n\n link = ($scope, $el, $attrs) ->\n $scope.$on \"sprint:task:moved\", () =>\n recalculateTaskboardWidth()\n\n bindOnce $scope, \"usTasks\", (project) ->\n $scope.statusesFolded = rs.tasks.getStatusColumnModes($scope.project.id)\n $scope.usFolded = rs.tasks.getUsRowModes($scope.project.id, $scope.sprintId)\n\n recalculateTaskboardWidth()\n\n $scope.foldStatus = (status) ->\n $scope.statusesFolded[status.id] = !!!$scope.statusesFolded[status.id]\n rs.tasks.storeStatusColumnModes($scope.projectId, $scope.statusesFolded)\n\n recalculateTaskboardWidth()\n\n $scope.foldUs = (us) ->\n if !us\n $scope.usFolded[null] = !!!$scope.usFolded[null]\n else\n $scope.usFolded[us.id] = !!!$scope.usFolded[us.id]\n\n rs.tasks.storeUsRowModes($scope.projectId, $scope.sprintId, $scope.usFolded)\n\n recalculateTaskboardWidth()\n\n getCeilWidth = (usId, statusId) =>\n tasks = $scope.usTasks[usId][statusId].length\n\n if $scope.statusesFolded[statusId]\n if tasks and $scope.usFolded[usId]\n tasksMatrixSize = Math.round(Math.sqrt(tasks))\n width = avatarWidth * tasksMatrixSize\n else\n width = avatarWidth\n\n return width\n\n return 0\n\n setStatusColumnWidth = (statusId, width) =>\n column = $el.find(\".squish-status-#{statusId}\")\n\n if width\n column.css('max-width', width)\n else\n column.css(\"max-width\", maxColumnWidth)\n\n refreshTaskboardTableWidth = () =>\n columnWidths = []\n\n columns = $el.find(\".task-colum-name\")\n\n columnWidths = _.map columns, (column) ->\n return $(column).outerWidth(true)\n\n totalWidth = _.reduce columnWidths, (total, width) ->\n return total + width\n\n $el.find('.taskboard-table-inner').css(\"width\", totalWidth)\n\n recalculateStatusColumnWidth = (statusId) =>\n #unassigned ceil\n statusFoldedWidth = getCeilWidth(null, statusId)\n\n _.forEach $scope.userstories, (us) ->\n width = getCeilWidth(us.id, statusId)\n statusFoldedWidth = width if width > statusFoldedWidth\n\n setStatusColumnWidth(statusId, statusFoldedWidth)\n\n recalculateTaskboardWidth = () =>\n _.forEach $scope.taskStatusList, (status) ->\n recalculateStatusColumnWidth(status.id)\n\n refreshTaskboardTableWidth()\n\n return\n\n return {link: link}\n\nmodule.directive(\"tgTaskboardSquishColumn\", [\"$tgResources\", TaskboardSquishColumnDirective])\n\n#############################################################################\n## Taskboard User Directive\n#############################################################################\n\nTaskboardUserDirective = ($log) ->\n clickable = false\n\n link = ($scope, $el, $attrs) ->\n username_label = $el.parent().find(\"a.task-assigned\")\n username_label.addClass(\"not-clickable\")\n\n $scope.$watch 'task.assigned_to', (assigned_to) ->\n user = $scope.usersById[assigned_to]\n\n if user is undefined\n _.assign($scope, {name: \"Unassigned\", imgurl: \"/images/unnamed.png\", clickable: clickable})\n else\n _.assign($scope, {name: user.full_name_display, imgurl: user.photo, clickable: clickable})\n\n username_label.text($scope.name)\n\n\n bindOnce $scope, \"project\", (project) ->\n if project.my_permissions.indexOf(\"modify_task\") > -1\n clickable = true\n $el.find(\".avatar-assigned-to\").on \"click\", (event) =>\n if $el.find('a').hasClass('noclick')\n return\n\n $ctrl = $el.controller()\n $ctrl.editTaskAssignedTo($scope.task)\n\n username_label.removeClass(\"not-clickable\")\n username_label.on \"click\", (event) ->\n if $el.find('a').hasClass('noclick')\n return\n\n $ctrl = $el.controller()\n $ctrl.editTaskAssignedTo($scope.task)\n\n\n return {\n link: link,\n templateUrl: \"taskboard/taskboard-user.html\",\n scope: {\n \"usersById\": \"=users\",\n \"project\": \"=\",\n \"task\": \"=\",\n }\n }\n\n\nmodule.directive(\"tgTaskboardUserAvatar\", [\"$log\", TaskboardUserDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard/sortable.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\n\nmodule = angular.module(\"taigaBacklog\")\n\n\n#############################################################################\n## Sortable Directive\n#############################################################################\n\nTaskboardSortableDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if not (project.my_permissions.indexOf(\"modify_us\") > -1)\n return\n\n oldParentScope = null\n newParentScope = null\n itemEl = null\n tdom = $el\n\n deleteElement = (itemEl) ->\n # Completelly remove item and its scope from dom\n itemEl.scope().$destroy()\n itemEl.off()\n itemEl.remove()\n\n tdom.sortable({\n handle: \".taskboard-task-inner\",\n dropOnEmpty: true\n connectWith: \".taskboard-tasks-box\"\n revert: 400\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n parentEl = ui.item.parent()\n itemEl = ui.item\n itemTask = itemEl.scope().task\n itemIndex = itemEl.index()\n newParentScope = parentEl.scope()\n\n oldUsId = if oldParentScope.us then oldParentScope.us.id else null\n oldStatusId = oldParentScope.st.id\n newUsId = if newParentScope.us then newParentScope.us.id else null\n newStatusId = newParentScope.st.id\n\n if newStatusId != oldStatusId or newUsId != oldUsId\n deleteElement(itemEl)\n\n $scope.$apply ->\n $rootscope.$broadcast(\"taskboard:task:move\", itemTask, newUsId, newStatusId, itemIndex)\n\n ui.item.find('a').removeClass('noclick')\n\n tdom.on \"sortstart\", (event, ui) ->\n oldParentScope = ui.item.parent().scope()\n ui.item.find('a').addClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgTaskboardSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n TaskboardSortableDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/kanban/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaKanban\")\n\n# Vars\n\ndefaultViewMode = \"maximized\"\nviewModes = [\n \"maximized\",\n \"minimized\"\n]\n\n\n#############################################################################\n## Kanban Controller\n#############################################################################\n\nclass KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @appMetaService, @navUrls, @events, @analytics, @translate) ->\n\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"KANBAN.SECTION_NAME\")\n @scope.statusViewModes = {}\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"KANBAN.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"KANBAN.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n initializeEventHandlers: ->\n @scope.$on \"usform:new:success\", =>\n @.loadUserstories()\n @.refreshTagsColors()\n @analytics.trackEvent(\"userstory\", \"create\", \"create userstory on kanban\", 1)\n\n @scope.$on \"usform:bulk:success\", =>\n @.loadUserstories()\n @analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on kanban\", 1)\n\n @scope.$on \"usform:edit:success\", =>\n @.loadUserstories()\n @.refreshTagsColors()\n\n @scope.$on(\"assigned-to:added\", @.onAssignedToChanged)\n @scope.$on(\"kanban:us:move\", @.moveUs)\n @scope.$on(\"kanban:show-userstories-for-status\", @.loadUserStoriesForStatus)\n @scope.$on(\"kanban:hide-userstories-for-status\", @.hideUserStoriesForStatus)\n\n # Template actions\n\n addNewUs: (type, statusId) ->\n switch type\n when \"standard\" then @rootscope.$broadcast(\"usform:new\", @scope.projectId, statusId, @scope.usStatusList)\n when \"bulk\" then @rootscope.$broadcast(\"usform:bulk\", @scope.projectId, statusId)\n\n changeUsAssignedTo: (us) ->\n @rootscope.$broadcast(\"assigned-to:add\", us)\n\n # Scope Events Handlers\n\n onAssignedToChanged: (ctx, userid, us) ->\n us.assigned_to = userid\n\n promise = @repo.save(us)\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n # Load data methods\n refreshTagsColors: ->\n return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) =>\n @scope.project.tags_colors = tags_colors\n\n loadUserstories: ->\n params = {\n status__is_archived: false\n }\n\n return @rs.userstories.listAll(@scope.projectId, params).then (userstories) =>\n @scope.userstories = userstories\n\n usByStatus = _.groupBy(userstories, \"status\")\n us_archived = []\n for status in @scope.usStatusList\n if not usByStatus[status.id]?\n usByStatus[status.id] = []\n if @scope.usByStatus?\n for us in @scope.usByStatus[status.id]\n if us.status != status.id\n us_archived.push(us)\n\n # Must preserve the archived columns if loaded\n if status.is_archived and @scope.usByStatus? and @scope.usByStatus[status.id].length != 0\n for us in @scope.usByStatus[status.id].concat(us_archived)\n if us.status == status.id\n usByStatus[status.id].push(us)\n\n usByStatus[status.id] = _.sortBy(usByStatus[status.id], \"kanban_order\")\n\n if userstories.length == 0\n status = @scope.usStatusList[0]\n usByStatus[status.id].push({isPlaceholder: true})\n\n @scope.usByStatus = usByStatus\n\n # The broadcast must be executed when the DOM has been fully reloaded.\n # We can't assure when this exactly happens so we need a defer\n scopeDefer @scope, =>\n @scope.$broadcast(\"userstories:loaded\", userstories)\n\n return userstories\n\n loadUserStoriesForStatus: (ctx, statusId) ->\n params = { status: statusId }\n return @rs.userstories.listAll(@scope.projectId, params).then (userstories) =>\n @scope.usByStatus[statusId] = _.sortBy(userstories, \"kanban_order\")\n @scope.$broadcast(\"kanban:shown-userstories-for-status\", statusId, userstories)\n return userstories\n\n hideUserStoriesForStatus: (ctx, statusId) ->\n @scope.usByStatus[statusId] = []\n @scope.$broadcast(\"kanban:hidden-userstories-for-status\", statusId)\n\n loadKanban: ->\n return @q.all([\n @.refreshTagsColors(),\n @.loadUserstories()\n ])\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_kanban_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.projectId = project.id\n @scope.points = _.sortBy(project.points, \"order\")\n @scope.pointsById = groupBy(project.points, (x) -> x.id)\n @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id)\n @scope.usStatusList = _.sortBy(project.us_statuses, \"order\")\n\n @.generateStatusViewModes()\n\n @scope.$emit(\"project:loaded\", project)\n return project\n\n initializeSubscription: ->\n routingKey1 = \"changes.project.#{@scope.projectId}.userstories\"\n @events.subscribe @scope, routingKey1, (message) =>\n @.loadUserstories()\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.initializeSubscription()\n @.loadKanban().then( => @scope.$broadcast(\"redraw:wip\"))\n\n\n ## View Mode methods\n\n generateStatusViewModes: ->\n storedStatusViewModes = @rs.kanban.getStatusViewModes(@scope.projectId)\n\n @scope.statusViewModes = {}\n for status in @scope.usStatusList\n mode = storedStatusViewModes[status.id] || defaultViewMode\n\n @scope.statusViewModes[status.id] = mode\n\n @.storeStatusViewModes()\n\n storeStatusViewModes: ->\n @rs.kanban.storeStatusViewModes(@scope.projectId, @scope.statusViewModes)\n\n updateStatusViewMode: (statusId, newViewMode) ->\n @scope.statusViewModes[statusId] = newViewMode\n @.storeStatusViewModes()\n\n isMaximized: (statusId) ->\n mode = @scope.statusViewModes[statusId] or defaultViewMode\n return mode == 'maximized'\n\n isMinimized: (statusId) ->\n mode = @scope.statusViewModes[statusId] or defaultViewMode\n return mode == 'minimized'\n\n # Utils methods\n\n prepareBulkUpdateData: (uses, field=\"kanban_order\") ->\n return _.map(uses, (x) -> {\"us_id\": x.id, \"order\": x[field]})\n\n resortUserStories: (uses) ->\n items = []\n for item, index in uses\n item.kanban_order = index\n if item.isModified()\n items.push(item)\n\n return items\n\n moveUs: (ctx, us, oldStatusId, newStatusId, index) ->\n if oldStatusId != newStatusId\n # Remove us from old status column\n r = @scope.usByStatus[oldStatusId].indexOf(us)\n @scope.usByStatus[oldStatusId].splice(r, 1)\n\n # Add us to new status column.\n @scope.usByStatus[newStatusId].splice(index, 0, us)\n us.status = newStatusId\n else\n r = @scope.usByStatus[newStatusId].indexOf(us)\n @scope.usByStatus[newStatusId].splice(r, 1)\n @scope.usByStatus[newStatusId].splice(index, 0, us)\n\n itemsToSave = @.resortUserStories(@scope.usByStatus[newStatusId])\n @scope.usByStatus[newStatusId] = _.sortBy(@scope.usByStatus[newStatusId], \"kanban_order\")\n\n # Persist the userstory\n promise = @repo.save(us)\n\n # Rehash userstories order field\n # and persist in bulk all changes.\n promise = promise.then =>\n itemsToSave = _.reject(itemsToSave, {\"id\": us.id})\n data = @.prepareBulkUpdateData(itemsToSave)\n\n return @rs.userstories.bulkUpdateKanbanOrder(us.project, data).then =>\n return itemsToSave\n\n return promise\n\n\nmodule.controller(\"KanbanController\", KanbanController)\n\n#############################################################################\n## Kanban Directive\n#############################################################################\n\nKanbanDirective = ($repo, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n tableBodyDom = $el.find(\".kanban-table-body\")\n\n tableBodyDom.on \"scroll\", (event) ->\n target = angular.element(event.currentTarget)\n tableHeaderDom = $el.find(\".kanban-table-header .kanban-table-inner\")\n tableHeaderDom.css(\"left\", -1 * target.scrollLeft())\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgKanban\", [\"$tgRepo\", \"$rootScope\", KanbanDirective])\n\n#############################################################################\n## Kanban Archived Status Column Header Control\n#############################################################################\n\nKanbanArchivedStatusHeaderDirective = ($rootscope, $translate) ->\n showArchivedText = $translate.instant(\"KANBAN.ACTION_SHOW_ARCHIVED\")\n hideArchivedText = $translate.instant(\"KANBAN.ACTION_HIDE_ARCHIVED\")\n\n link = ($scope, $el, $attrs) ->\n status = $scope.$eval($attrs.tgKanbanArchivedStatusHeader)\n hidden = true\n\n $scope.class = \"icon-open-eye\"\n $scope.title = showArchivedText\n\n $el.on \"click\", (event) ->\n hidden = not hidden\n\n $scope.$apply ->\n if hidden\n $scope.class = \"icon-open-eye\"\n $scope.title = showArchivedText\n $rootscope.$broadcast(\"kanban:hide-userstories-for-status\", status.id)\n\n else\n $scope.class = \"icon-closed-eye\"\n $scope.title = hideArchivedText\n $rootscope.$broadcast(\"kanban:show-userstories-for-status\", status.id)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgKanbanArchivedStatusHeader\", [ \"$rootScope\", \"$translate\", KanbanArchivedStatusHeaderDirective])\n\n\n#############################################################################\n## Kanban Archived Status Column Intro Directive\n#############################################################################\n\nKanbanArchivedStatusIntroDirective = ($translate) ->\n userStories = []\n\n link = ($scope, $el, $attrs) ->\n hiddenUserStoriexText = $translate.instant(\"KANBAN.HIDDEN_USER_STORIES\")\n status = $scope.$eval($attrs.tgKanbanArchivedStatusIntro)\n $el.text(hiddenUserStoriexText)\n\n updateIntroText = ->\n if userStories.length > 0\n $el.text(\"\")\n else\n $el.text(hiddenUserStoriexText)\n\n $scope.$on \"kanban:us:move\", (ctx, itemUs, oldStatusId, newStatusId, itemIndex) ->\n # The destination columnd is this one\n if status.id == newStatusId\n # Reorder\n if status.id == oldStatusId\n r = userStories.indexOf(itemUs)\n userStories.splice(r, 1)\n userStories.splice(itemIndex, 0, itemUs)\n\n # Archiving user story\n else\n itemUs.isArchived = true\n userStories.splice(itemIndex, 0, itemUs)\n\n # Unarchiving user story\n else if status.id == oldStatusId\n itemUs.isArchived = false\n r = userStories.indexOf(itemUs)\n userStories.splice(r, 1)\n\n updateIntroText()\n\n $scope.$on \"kanban:shown-userstories-for-status\", (ctx, statusId, userStoriesLoaded) ->\n if statusId == status.id\n userStories = _.filter(userStoriesLoaded, (us) -> us.status == status.id)\n updateIntroText()\n\n $scope.$on \"kanban:hidden-userstories-for-status\", (ctx, statusId) ->\n if statusId == status.id\n userStories = []\n updateIntroText()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgKanbanArchivedStatusIntro\", [\"$translate\", KanbanArchivedStatusIntroDirective])\n\n\n#############################################################################\n## Kanban User Story Directive\n#############################################################################\n\nKanbanUserstoryDirective = ($rootscope, $loading, $rs) ->\n link = ($scope, $el, $attrs, $model) ->\n $el.disableSelection()\n\n $scope.$watch \"us\", (us) ->\n if us.is_blocked and not $el.hasClass(\"blocked\")\n $el.addClass(\"blocked\")\n else if not us.is_blocked and $el.hasClass(\"blocked\")\n $el.removeClass(\"blocked\")\n\n $el.on 'click', '.icon-edit', (event) ->\n if $el.find(\".icon-edit\").hasClass(\"noclick\")\n return\n\n target = $(event.target)\n\n currentLoading = $loading()\n .target(target)\n .timeout(200)\n .removeClasses(\"icon-edit\")\n .start()\n\n us = $model.$modelValue\n $rs.userstories.getByRef(us.project, us.ref).then (editingUserStory) =>\n $rootscope.$broadcast(\"usform:edit\", editingUserStory)\n currentLoading.finish()\n\n $scope.getTemplateUrl = () ->\n if $scope.us.isPlaceholder\n return \"common/components/kanban-placeholder.html\"\n else\n return \"kanban/kanban-task.html\"\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n template: '',\n link: link\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgKanbanUserstory\", [\"$rootScope\", \"$tgLoading\", \"$tgResources\", KanbanUserstoryDirective])\n\n#############################################################################\n## Kanban Squish Column Directive\n#############################################################################\n\nKanbanSquishColumnDirective = (rs) ->\n\n link = ($scope, $el, $attrs) ->\n $scope.$on \"project:loaded\", (event, project) ->\n $scope.folds = rs.kanban.getStatusColumnModes(project.id)\n updateTableWidth()\n\n $scope.foldStatus = (status) ->\n $scope.folds[status.id] = !!!$scope.folds[status.id]\n rs.kanban.storeStatusColumnModes($scope.projectId, $scope.folds)\n updateTableWidth()\n return\n\n updateTableWidth = ->\n columnWidths = _.map $scope.usStatusList, (status) ->\n if $scope.folds[status.id]\n return 40\n else\n return 310\n totalWidth = _.reduce columnWidths, (total, width) ->\n return total + width\n $el.find('.kanban-table-inner').css(\"width\", totalWidth)\n\n return {link: link}\n\nmodule.directive(\"tgKanbanSquishColumn\", [\"$tgResources\", KanbanSquishColumnDirective])\n\n#############################################################################\n## Kanban WIP Limit Directive\n#############################################################################\n\nKanbanWipLimitDirective = ->\n link = ($scope, $el, $attrs) ->\n $el.disableSelection()\n\n status = $scope.$eval($attrs.tgKanbanWipLimit)\n\n redrawWipLimit = =>\n $el.find(\".kanban-wip-limit\").remove()\n timeout 200, =>\n element = $el.find(\".kanban-task\")[status.wip_limit]\n if element\n angular.element(element).before(\"
\")\n\n if status and not status.is_archived\n $scope.$on \"redraw:wip\", redrawWipLimit\n $scope.$on \"kanban:us:move\", redrawWipLimit\n $scope.$on \"usform:new:success\", redrawWipLimit\n $scope.$on \"usform:bulk:success\", redrawWipLimit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgKanbanWipLimit\", KanbanWipLimitDirective)\n\n\n#############################################################################\n## Kanban User Directive\n#############################################################################\n\nKanbanUserDirective = ($log, $compile) ->\n template = _.template(\"\"\"\n
\n class=\"not-clickable\"<% } %>>\n \" alt=\"<%- name %>\" class=\"avatar\">\n \n
\n \"\"\")\n\n clickable = false\n\n link = ($scope, $el, $attrs, $model) ->\n username_label = $el.parent().find(\"a.task-assigned\")\n username_label.addClass(\"not-clickable\")\n\n if not $attrs.tgKanbanUserAvatar\n return $log.error \"KanbanUserDirective: no attr is defined\"\n\n wtid = $scope.$watch $attrs.tgKanbanUserAvatar, (v) ->\n if not $scope.usersById?\n $log.error \"KanbanUserDirective requires userById set in scope.\"\n wtid()\n else\n user = $scope.usersById[v]\n render(user)\n\n render = (user) ->\n if user is undefined\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\", clickable: clickable}\n else\n ctx = {name: user.full_name_display, imgurl: user.photo, clickable: clickable}\n\n html = $compile(template(ctx))($scope)\n $el.html(html)\n username_label.text(ctx.name)\n\n bindOnce $scope, \"project\", (project) ->\n if project.my_permissions.indexOf(\"modify_us\") > -1\n clickable = true\n $el.on \"click\", (event) =>\n if $el.find(\"a\").hasClass(\"noclick\")\n return\n\n us = $model.$modelValue\n $ctrl = $el.controller()\n $ctrl.changeUsAssignedTo(us)\n\n username_label.removeClass(\"not-clickable\")\n username_label.on \"click\", (event) ->\n if $el.find(\"a\").hasClass(\"noclick\")\n return\n\n us = $model.$modelValue\n $ctrl = $el.controller()\n $ctrl.changeUsAssignedTo(us)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link, require:\"ngModel\"}\n\nmodule.directive(\"tgKanbanUserAvatar\", [\"$log\", \"$compile\", KanbanUserDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/kanban/sortable.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaKanban\")\n\n\n#############################################################################\n## Sortable Directive\n#############################################################################\n\nKanbanSortableDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n if not (project.my_permissions.indexOf(\"modify_us\") > -1)\n return\n\n oldParentScope = null\n newParentScope = null\n itemEl = null\n tdom = $el\n\n deleteElement = (itemEl) ->\n # Completelly remove item and its scope from dom\n itemEl.scope().$destroy()\n itemEl.off()\n itemEl.remove()\n\n tdom.sortable({\n handle: \".kanban-task-inner\"\n dropOnEmpty: true\n connectWith: \".kanban-uses-box\"\n revert: 400\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n parentEl = ui.item.parent()\n itemEl = ui.item\n itemUs = itemEl.scope().us\n itemIndex = itemEl.index()\n newParentScope = parentEl.scope()\n\n newStatusId = newParentScope.s.id\n oldStatusId = oldParentScope.s.id\n\n if newStatusId != oldStatusId\n deleteElement(itemEl)\n\n $scope.$apply ->\n $rootscope.$broadcast(\"kanban:us:move\", itemUs, itemUs.status, newStatusId, itemIndex)\n\n ui.item.find('a').removeClass('noclick')\n\n tdom.on \"sortstart\", (event, ui) ->\n oldParentScope = ui.item.parent().scope()\n ui.item.find('a').addClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgKanbanSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n KanbanSortableDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaIssues\")\n\n#############################################################################\n## Issue Detail Controller\n#############################################################################\n\nclass IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgAnalytics\",\n \"$tgNavUrls\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @log, @appMetaService, @analytics, @navUrls, @translate) ->\n bindMethods(@)\n\n @scope.issueRef = @params.issueref\n @scope.sectionName = @translate.instant(\"ISSUES.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n @._setMeta()\n @.initializeOnDeleteGoToUrl()\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n title = @translate.instant(\"ISSUE.PAGE_TITLE\", {\n issueRef: \"##{@scope.issue.ref}\"\n issueSubject: @scope.issue.subject\n projectName: @scope.project.name\n })\n description = @translate.instant(\"ISSUE.PAGE_DESCRIPTION\", {\n issueStatus: @scope.statusById[@scope.issue.status]?.name or \"--\"\n issueType: @scope.typeById[@scope.issue.type]?.name or \"--\"\n issueSeverity: @scope.severityById[@scope.issue.severity]?.name or \"--\"\n issuePriority: @scope.priorityById[@scope.issue.priority]?.name or \"--\"\n issueDescription: angular.element(@scope.issue.description_html or \"\").text()\n })\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n @scope.$on \"attachment:create\", =>\n @analytics.trackEvent(\"attachment\", \"create\", \"create attachment on issue\", 1)\n\n @scope.$on \"promote-issue-to-us:success\", =>\n @analytics.trackEvent(\"issue\", \"promoteToUserstory\", \"promote issue to userstory\", 1)\n @rootscope.$broadcast(\"object:updated\")\n @.loadIssue()\n\n @scope.$on \"comment:new\", =>\n @.loadIssue()\n\n @scope.$on \"custom-attributes-values:edit\", =>\n @rootscope.$broadcast(\"object:updated\")\n\n initializeOnDeleteGoToUrl: ->\n ctx = {project: @scope.project.slug}\n if @scope.project.is_issues_activated\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-issues\", ctx)\n else\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project\", ctx)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.statusList = project.issue_statuses\n @scope.statusById = groupBy(project.issue_statuses, (x) -> x.id)\n @scope.typeById = groupBy(project.issue_types, (x) -> x.id)\n @scope.typeList = _.sortBy(project.issue_types, \"order\")\n @scope.severityList = project.severities\n @scope.severityById = groupBy(project.severities, (x) -> x.id)\n @scope.priorityList = project.priorities\n @scope.priorityById = groupBy(project.priorities, (x) -> x.id)\n return project\n\n loadIssue: ->\n return @rs.issues.getByRef(@scope.projectId, @params.issueref).then (issue) =>\n @scope.issue = issue\n @scope.issueId = issue.id\n @scope.commentModel = issue\n\n if @scope.issue.neighbors.previous.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.issue.neighbors.previous.ref\n }\n @scope.previousUrl = @navUrls.resolve(\"project-issues-detail\", ctx)\n\n if @scope.issue.neighbors.next.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.issue.neighbors.next.ref\n }\n @scope.nextUrl = @navUrls.resolve(\"project-issues-detail\", ctx)\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadIssue()\n\n ###\n # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n # See app/modules/components/vote-button for more info\n ###\n onUpvote: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.upvote(@scope.issueId).then(onSuccess, onError)\n\n onDownvote: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.downvote(@scope.issueId).then(onSuccess, onError)\n\n ###\n # Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n # See app/modules/components/watch-button for more info\n ###\n onWatch: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.watch(@scope.issueId).then(onSuccess, onError)\n\n onUnwatch: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.unwatch(@scope.issueId).then(onSuccess, onError)\n\nmodule.controller(\"IssueDetailController\", IssueDetailController)\n\n\n#############################################################################\n## Issue status display directive\n#############################################################################\n\nIssueStatusDisplayDirective = ($template, $compile)->\n # Display if a Issue is open or closed and its issueboard status.\n #\n # Example:\n # tg-issue-status-display(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.statusById object\n\n template = $template.get(\"common/components/status-display.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (issue) ->\n status = $scope.statusById[issue.status]\n\n html = template({\n is_closed: status.is_closed\n status: status\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueStatusDisplay\", [\"$tgTemplate\", \"$compile\", IssueStatusDisplayDirective])\n\n\n#############################################################################\n## Issue status button directive\n#############################################################################\n\nIssueStatusButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the status of Issue and you can edit it.\n #\n # Example:\n # tg-issue-status-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.statusById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issues-status-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n status = $scope.statusById[issue.status]\n\n html = template({\n status: status\n statuses: $scope.statusList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (statusId) =>\n $.fn.popover().closeAll()\n\n issue = $model.$modelValue.clone()\n issue.status = statusId\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".status-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n\n save(target.data(\"status-id\"))\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssueStatusButtonDirective])\n\n#############################################################################\n## Issue type button directive\n#############################################################################\n\nIssueTypeButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the type of Issue and you can edit it.\n #\n # Example:\n # tg-issue-type-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.typeById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issue-type-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n type = $scope.typeById[issue.type]\n\n html = template({\n type: type\n typees: $scope.typeList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (type) =>\n $.fn.popover().closeAll()\n issue = $model.$modelValue.clone()\n issue.type = type\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".type-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-type\").popover().open()\n\n $el.on \"click\", \".type\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n type = target.data(\"type-id\")\n save(type)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueTypeButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssueTypeButtonDirective])\n\n\n#############################################################################\n## Issue severity button directive\n#############################################################################\n\nIssueSeverityButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the severity of Issue and you can edit it.\n #\n # Example:\n # tg-issue-severity-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.severityById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issue-severity-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n severity = $scope.severityById[issue.severity]\n\n html = template({\n severity: severity\n severityes: $scope.severityList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (severity) =>\n $.fn.popover().closeAll()\n\n issue = $model.$modelValue.clone()\n issue.severity = severity\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".severity-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-severity\").popover().open()\n\n $el.on \"click\", \".severity\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n severity = target.data(\"severity-id\")\n\n save(severity)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueSeverityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssueSeverityButtonDirective])\n\n\n#############################################################################\n## Issue priority button directive\n#############################################################################\n\nIssuePriorityButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the priority of Issue and you can edit it.\n #\n # Example:\n # tg-issue-priority-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.priorityById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issue-priority-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n priority = $scope.priorityById[issue.priority]\n\n html = template({\n priority: priority\n priorityes: $scope.priorityList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (priority) =>\n $.fn.popover().closeAll()\n\n issue = $model.$modelValue.clone()\n issue.priority = priority\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".priority-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-priority\").popover().open()\n\n $el.on \"click\", \".priority\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n priority = target.data(\"priority-id\")\n\n save(priority)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssuePriorityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssuePriorityButtonDirective])\n\n\n#############################################################################\n## Promote Issue to US button directive\n#############################################################################\n\nPromoteIssueToUsButtonDirective = ($rootScope, $repo, $confirm, $qqueue, $translate) ->\n link = ($scope, $el, $attrs, $model) ->\n\n save = $qqueue.bindAdd (issue, askResponse) =>\n data = {\n generated_from_issue: issue.id\n project: issue.project,\n subject: issue.subject\n description: issue.description\n tags: issue.tags\n is_blocked: issue.is_blocked\n blocked_note: issue.blocked_note\n }\n\n onSuccess = ->\n askResponse.finish()\n $confirm.notify(\"success\")\n $rootScope.$broadcast(\"promote-issue-to-us:success\")\n\n onError = ->\n askResponse.finish()\n $confirm.notify(\"error\")\n\n $repo.create(\"userstories\", data).then(onSuccess, onError)\n\n\n $el.on \"click\", \"a\", (event) ->\n event.preventDefault()\n issue = $model.$modelValue\n\n title = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.TITLE\")\n message = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.MESSAGE\")\n subtitle = issue.subject\n\n $confirm.ask(title, subtitle, message).then (response) =>\n save(issue, response)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n restrict: \"AE\"\n require: \"ngModel\"\n templateUrl: \"issue/promote-issue-to-us-button.html\"\n link: link\n }\n\nmodule.directive(\"tgPromoteIssueToUsButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgQqueue\", \"$translate\"\n PromoteIssueToUsButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaIssues\")\n\n#############################################################################\n## Issue Create Lightbox Directive\n#############################################################################\n\nCreateIssueDirective = ($repo, $confirm, $rootscope, lightboxService, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley()\n $scope.issue = {}\n\n $scope.$on \"issueform:new\", (ctx, project)->\n $el.find(\".tag-input\").val(\"\")\n\n lightboxService.open($el)\n\n $scope.issue = {\n project: project.id\n subject: \"\"\n status: project.default_issue_status\n type: project.default_issue_type\n priority: project.default_priority\n severity: project.default_severity\n tags: []\n }\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.create(\"issues\", $scope.issue)\n\n promise.then (data) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"issueform:new:success\", data)\n lightboxService.close($el)\n $confirm.notify(\"success\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n\n return {link:link}\n\nmodule.directive(\"tgLbCreateIssue\", [\"$tgRepo\", \"$tgConfirm\", \"$rootScope\", \"lightboxService\", \"$tgLoading\",\n CreateIssueDirective])\n\n\n#############################################################################\n## Issue Bulk Create Lightbox Directive\n#############################################################################\n\nCreateBulkIssuesDirective = ($repo, $rs, $confirm, $rootscope, $loading, lightboxService) ->\n link = ($scope, $el, attrs) ->\n $scope.$on \"issueform:bulk\", (ctx, projectId, status)->\n lightboxService.open($el)\n $scope.new = {\n projectId: projectId\n bulk: \"\"\n }\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n data = $scope.new.bulk\n projectId = $scope.new.projectId\n\n promise = $rs.issues.bulkCreate(projectId, data)\n promise.then (result) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"issueform:new:success\", result)\n lightboxService.close($el)\n $confirm.notify(\"success\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateBulkIssues\", [\"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\",\n \"lightboxService\", CreateBulkIssuesDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/list.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntrim = @.taiga.trim\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounceLeading = @.taiga.debounceLeading\nstartswith = @.taiga.startswith\n\nmodule = angular.module(\"taigaIssues\")\n\n#############################################################################\n## Issues Controller\n#############################################################################\n\nclass IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$tgUrls\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @urls, @params, @q, @location, @appMetaService,\n @navUrls, @events, @analytics, @translate) ->\n @scope.sectionName = \"Issues\"\n @scope.filters = {}\n\n if _.isEmpty(@location.search())\n filters = @rs.issues.getFilters(@params.pslug)\n filters.page = 1\n @location.search(filters)\n @location.replace()\n return\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"ISSUES.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"ISSUES.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"issueform:new:success\", =>\n @analytics.trackEvent(\"issue\", \"create\", \"create issue on issues list\", 1)\n @.loadIssues()\n\n initializeSubscription: ->\n routingKey = \"changes.project.#{@scope.projectId}.issues\"\n @events.subscribe @scope, routingKey, (message) =>\n @.loadIssues()\n\n storeFilters: ->\n @rs.issues.storeFilters(@params.pslug, @location.search())\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_issues_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n\n @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id)\n @scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\")\n @scope.severityById = groupBy(project.severities, (x) -> x.id)\n @scope.severityList = _.sortBy(project.severities, \"order\")\n @scope.priorityById = groupBy(project.priorities, (x) -> x.id)\n @scope.priorityList = _.sortBy(project.priorities, \"order\")\n @scope.issueTypes = _.sortBy(project.issue_types, \"order\")\n @scope.issueTypeById = groupBy(project.issue_types, (x) -> x.id)\n\n return project\n\n getUrlFilters: ->\n filters = _.pick(@location.search(), \"page\", \"tags\", \"status\", \"types\",\n \"q\", \"severities\", \"priorities\",\n \"assignedTo\", \"createdBy\", \"orderBy\")\n\n filters.page = 1 if not filters.page\n return filters\n\n getUrlFilter: (name) ->\n filters = _.pick(@location.search(), name)\n return filters[name]\n\n loadMyFilters: ->\n return @rs.issues.getMyFilters(@scope.projectId).then (filters) =>\n return _.map filters, (value, key) =>\n return {id: key, name: key, type: \"myFilters\", selected: false}\n\n removeNotExistingFiltersFromUrl: ->\n currentSearch = @location.search()\n urlfilters = @.getUrlFilters()\n\n for filterName, filterValue of urlfilters\n if filterName == \"page\" or filterName == \"orderBy\" or filterName == \"q\"\n continue\n\n if filterName == \"tags\"\n splittedValues = _.map(\"#{filterValue}\".split(\",\"))\n else\n splittedValues = _.map(\"#{filterValue}\".split(\",\"), (x) -> if x == \"null\" then null else parseInt(x))\n\n existingValues = _.intersection(splittedValues, _.map(@scope.filters[filterName], \"id\"))\n if splittedValues.length != existingValues.length\n @location.search(filterName, existingValues.join())\n\n if currentSearch != @location.search()\n @location.replace()\n\n markSelectedFilters: (filters, urlfilters) ->\n # Build selected filters (from url) fast lookup data structure\n searchdata = {}\n for name, value of _.omit(urlfilters, \"page\", \"orderBy\")\n if not searchdata[name]?\n searchdata[name] = {}\n\n for val in \"#{value}\".split(\",\")\n searchdata[name][val] = true\n\n isSelected = (type, id) ->\n if searchdata[type]? and searchdata[type][id]\n return true\n return false\n\n for key, value of filters\n for obj in value\n obj.selected = if isSelected(obj.type, obj.id) then true else undefined\n\n loadFilters: ->\n urlfilters = @.getUrlFilters()\n\n if urlfilters.q\n @scope.filtersQ = urlfilters.q\n\n # Load My Filters\n promise = @.loadMyFilters().then (myFilters) =>\n @scope.filters.myFilters = myFilters\n return myFilters\n\n loadFilters = {}\n loadFilters.project = @scope.projectId\n loadFilters.tags = urlfilters.tags\n loadFilters.status = urlfilters.status\n loadFilters.q = urlfilters.q\n loadFilters.types = urlfilters.types\n loadFilters.severities = urlfilters.severities\n loadFilters.priorities = urlfilters.priorities\n loadFilters.assigned_to = urlfilters.assignedTo\n loadFilters.owner = urlfilters.createdBy\n\n # Load default filters data\n promise = promise.then =>\n return @rs.issues.filtersData(loadFilters)\n\n # Format filters and set them on scope\n return promise.then (data) =>\n usersFiltersFormat = (users, type, unknownOption) =>\n reformatedUsers = _.map users, (t) =>\n t.type = type\n t.name = if t.full_name then t.full_name else unknownOption\n\n return t\n\n unknownItem = _.remove(reformatedUsers, (u) -> not u.id)\n reformatedUsers = _.sortBy(reformatedUsers, (u) -> u.name.toUpperCase())\n if unknownItem.length > 0\n reformatedUsers.unshift(unknownItem[0])\n return reformatedUsers\n\n choicesFiltersFormat = (choices, type, byIdObject) =>\n _.map choices, (t) ->\n t.type = type\n return t\n\n tagsFilterFormat = (tags) =>\n return _.map tags, (t) ->\n t.id = t.name\n t.type = 'tags'\n return t\n\n # Build filters data structure\n @scope.filters.status = choicesFiltersFormat(data.statuses, \"status\", @scope.issueStatusById)\n @scope.filters.severities = choicesFiltersFormat(data.severities, \"severities\", @scope.severityById)\n @scope.filters.priorities = choicesFiltersFormat(data.priorities, \"priorities\", @scope.priorityById)\n @scope.filters.assignedTo = usersFiltersFormat(data.assigned_to, \"assignedTo\", \"Unassigned\")\n @scope.filters.createdBy = usersFiltersFormat(data.owners, \"createdBy\", \"Unknown\")\n @scope.filters.types = choicesFiltersFormat(data.types, \"types\", @scope.issueTypeById)\n @scope.filters.tags = tagsFilterFormat(data.tags)\n\n @.removeNotExistingFiltersFromUrl()\n @.markSelectedFilters(@scope.filters, urlfilters)\n\n @rootscope.$broadcast(\"filters:loaded\", @scope.filters)\n\n # We need to guarantee that the last petition done here is the finally used\n # When searching by text loadIssues can be called fastly with different parameters and\n # can be resolved in a different order than generated\n # We count the requests made and only if the callback is for the last one data is updated\n loadIssuesRequests: 0\n loadIssues: =>\n @scope.urlFilters = @.getUrlFilters()\n\n # Convert stored filters to http parameters\n # ready filters (the name difference exists\n # because of some automatic lookups and is\n # the simplest way todo it without adding\n # additional complexity to code.\n @scope.httpParams = {}\n for name, values of @scope.urlFilters\n if name == \"severities\"\n name = \"severity\"\n else if name == \"orderBy\"\n name = \"order_by\"\n else if name == \"priorities\"\n name = \"priority\"\n else if name == \"assignedTo\"\n name = \"assigned_to\"\n else if name == \"createdBy\"\n name = \"owner\"\n else if name == \"status\"\n name = \"status\"\n else if name == \"types\"\n name = \"type\"\n @scope.httpParams[name] = values\n\n promise = @rs.issues.list(@scope.projectId, @scope.httpParams)\n @.loadIssuesRequests += 1\n promise.index = @.loadIssuesRequests\n promise.then (data) =>\n if promise.index == @.loadIssuesRequests\n @scope.issues = data.models\n @scope.page = data.current\n @scope.count = data.count\n @scope.paginatedBy = data.paginatedBy\n\n return data\n\n return promise\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.initializeSubscription()\n @.loadFilters()\n\n return @.loadIssues()\n\n saveCurrentFiltersTo: (newFilter) ->\n deferred = @q.defer()\n @rs.issues.getMyFilters(@scope.projectId).then (filters) =>\n filters[newFilter] = @location.search()\n @rs.issues.storeMyFilters(@scope.projectId, filters).then =>\n deferred.resolve()\n return deferred.promise\n\n deleteMyFilter: (filter) ->\n deferred = @q.defer()\n @rs.issues.getMyFilters(@scope.projectId).then (filters) =>\n delete filters[filter]\n @rs.issues.storeMyFilters(@scope.projectId, filters).then =>\n deferred.resolve()\n return deferred.promise\n\n # Functions used from templates\n addNewIssue: ->\n @rootscope.$broadcast(\"issueform:new\", @scope.project)\n\n addIssuesInBulk: ->\n @rootscope.$broadcast(\"issueform:bulk\", @scope.projectId)\n\n\nmodule.controller(\"IssuesController\", IssuesController)\n\n#############################################################################\n## Issues Directive\n#############################################################################\n\nIssuesDirective = ($log, $location, $template, $compile) ->\n ## Issues Pagination\n template = $template.get(\"issue/issue-paginator.html\", true)\n\n linkPagination = ($scope, $el, $attrs, $ctrl) ->\n # Constants\n afterCurrent = 2\n beforeCurrent = 4\n atBegin = 2\n atEnd = 2\n\n $pagEl = $el.find(\".issues-paginator\")\n\n getNumPages = ->\n numPages = $scope.count / $scope.paginatedBy\n if parseInt(numPages, 10) < numPages\n numPages = parseInt(numPages, 10) + 1\n else\n numPages = parseInt(numPages, 10)\n\n return numPages\n\n renderPagination = ->\n numPages = getNumPages()\n\n if numPages <= 1\n $pagEl.hide()\n return\n $pagEl.show()\n\n pages = []\n options = {}\n options.pages = pages\n options.showPrevious = ($scope.page > 1)\n options.showNext = not ($scope.page == numPages)\n\n cpage = $scope.page\n\n for i in [1..numPages]\n if i == (cpage + afterCurrent) and numPages > (cpage + afterCurrent + atEnd)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i == (cpage - beforeCurrent) and cpage > (atBegin + beforeCurrent)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i > (cpage + afterCurrent) and i <= (numPages - atEnd)\n else if i < (cpage - beforeCurrent) and i > atBegin\n else if i == cpage\n pages.push({classes: \"active\", num: i, type: \"page-active\"})\n else\n pages.push({classes: \"page\", num: i, type: \"page\"})\n\n\n html = template(options)\n html = $compile(html)($scope)\n\n $pagEl.html(html)\n\n $scope.$watch \"issues\", (value) ->\n # Do nothing if value is not logical true\n return if not value\n\n renderPagination()\n\n $el.on \"click\", \".issues-paginator a.next\", (event) ->\n event.preventDefault()\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page + 1)\n $ctrl.loadIssues()\n\n $el.on \"click\", \".issues-paginator a.previous\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page - 1)\n $ctrl.loadIssues()\n\n $el.on \"click\", \".issues-paginator li.page > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n pagenum = target.data(\"pagenum\")\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", pagenum)\n $ctrl.loadIssues()\n\n ## Issues Filters\n linkOrdering = ($scope, $el, $attrs, $ctrl) ->\n # Draw the arrow the first time\n currentOrder = $ctrl.getUrlFilter(\"orderBy\") or \"created_date\"\n if currentOrder\n icon = if startswith(currentOrder, \"-\") then \"icon-arrow-up\" else \"icon-arrow-bottom\"\n colHeadElement = $el.find(\".row.title > div[data-fieldname='#{trim(currentOrder, \"-\")}']\")\n colHeadElement.html(\"#{colHeadElement.html()}\")\n\n $el.on \"click\", \".row.title > div\", (event) ->\n target = angular.element(event.currentTarget)\n\n currentOrder = $ctrl.getUrlFilter(\"orderBy\")\n newOrder = target.data(\"fieldname\")\n\n finalOrder = if currentOrder == newOrder then \"-#{newOrder}\" else newOrder\n\n $scope.$apply ->\n $ctrl.replaceFilter(\"orderBy\", finalOrder)\n $ctrl.storeFilters()\n $ctrl.loadIssues().then ->\n # Update the arrow\n $el.find(\".row.title > div > span.icon\").remove()\n icon = if startswith(finalOrder, \"-\") then \"icon-arrow-up\" else \"icon-arrow-bottom\"\n target.html(\"#{target.html()}\")\n\n ## Issues Link\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n linkOrdering($scope, $el, $attrs, $ctrl)\n linkPagination($scope, $el, $attrs, $ctrl)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgIssues\", [\"$log\", \"$tgLocation\", \"$tgTemplate\", \"$compile\", IssuesDirective])\n\n\n#############################################################################\n## Issues Filters Directive\n#############################################################################\n\nIssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $template, $translate, $compile, $auth) ->\n template = $template.get(\"issue/issues-filters.html\", true)\n templateSelected = $template.get(\"issue/issues-filters-selected.html\", true)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.closest(\".wrapper\").controller()\n\n selectedFilters = []\n\n showFilters = (title, type) ->\n $el.find(\".filters-cats\").hide()\n $el.find(\".filter-list\").removeClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").removeClass(\"hidden\")\n $el.find(\"h2 a.subfilter span.title\").html(title)\n $el.find(\"h2 a.subfilter span.title\").prop(\"data-type\", type)\n\n showCategories = ->\n $el.find(\".filters-cats\").show()\n $el.find(\".filter-list\").addClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").addClass(\"hidden\")\n\n initializeSelectedFilters = (filters) ->\n selectedFilters = []\n for name, values of filters\n for val in values\n selectedFilters.push(val) if val.selected\n\n renderSelectedFilters(selectedFilters)\n\n renderSelectedFilters = (selectedFilters) ->\n _.filter selectedFilters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = templateSelected({filters:selectedFilters})\n html = $compile(html)($scope)\n $el.find(\".filters-applied\").html(html)\n\n if $auth.isAuthenticated() && selectedFilters.length > 0\n $el.find(\".save-filters\").show()\n else\n $el.find(\".save-filters\").hide()\n\n renderFilters = (filters) ->\n _.filter filters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = template({filters:filters})\n html = $compile(html)($scope)\n $el.find(\".filter-list\").html(html)\n\n getFiltersType = () ->\n return $el.find(\"h2 a.subfilter span.title\").prop('data-type')\n\n reloadIssues = () ->\n currentFiltersType = getFiltersType()\n\n $q.all([$ctrl.loadIssues(), $ctrl.loadFilters()]).then () ->\n filters = $scope.filters[currentFiltersType]\n renderFilters(_.reject(filters, \"selected\"))\n\n toggleFilterSelection = (type, id) ->\n if type == \"myFilters\"\n $rs.issues.getMyFilters($scope.projectId).then (data) ->\n myFilters = data\n filters = myFilters[id]\n filters.page = 1\n $ctrl.replaceAllFilters(filters)\n $ctrl.storeFilters()\n $ctrl.loadIssues()\n $ctrl.markSelectedFilters($scope.filters, filters)\n initializeSelectedFilters($scope.filters)\n return null\n\n filters = $scope.filters[type]\n filterId = if type == 'tags' then taiga.toString(id) else id\n filter = _.find(filters, {id: filterId})\n filter.selected = (not filter.selected)\n\n # Convert id to null as string for properly\n # put null value on url parameters\n id = \"null\" if id is null\n\n if filter.selected\n selectedFilters.push(filter)\n $ctrl.selectFilter(type, id)\n $ctrl.selectFilter(\"page\", 1)\n $ctrl.storeFilters()\n else\n selectedFilters = _.reject selectedFilters, (f) ->\n return f.id == filter.id && f.type == filter.type\n\n $ctrl.unselectFilter(type, id)\n $ctrl.selectFilter(\"page\", 1)\n $ctrl.storeFilters()\n\n reloadIssues()\n\n renderSelectedFilters(selectedFilters)\n\n currentFiltersType = getFiltersType()\n\n if type == currentFiltersType\n renderFilters(_.reject(filters, \"selected\"))\n\n # Angular Watchers\n $scope.$on \"filters:loaded\", (ctx, filters) ->\n initializeSelectedFilters(filters)\n\n $scope.$on \"filters:issueupdate\", (ctx, filters) ->\n html = template({filters:filters.status})\n html = $compile(html)($scope)\n $el.find(\".filter-list\").html(html)\n\n selectQFilter = debounceLeading 100, (value) ->\n return if value is undefined\n\n $ctrl.replaceFilter(\"page\", null, true)\n\n if value.length == 0\n $ctrl.replaceFilter(\"q\", null)\n $ctrl.storeFilters()\n else\n $ctrl.replaceFilter(\"q\", value)\n $ctrl.storeFilters()\n\n reloadIssues()\n\n $scope.$watch(\"filtersQ\", selectQFilter)\n\n # Dom Event Handlers\n $el.on \"click\", \".filters-cats > ul > li > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n tags = $scope.filters[target.data(\"type\")]\n renderFilters(_.reject(tags, \"selected\"))\n showFilters(target.attr(\"title\"), target.data(\"type\"))\n\n $el.on \"click\", \".filters-inner > .filters-step-cat > .breadcrumb > .back\", (event) ->\n event.preventDefault()\n showCategories($el)\n\n $el.on \"click\", \".filters-applied a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n id = target.data(\"id\") or null\n type = target.data(\"type\")\n toggleFilterSelection(type, id)\n\n $el.on \"click\", \".filter-list .single-filter\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.toggleClass(\"active\")\n\n id = target.data(\"id\") or null\n type = target.data(\"type\")\n\n # A saved filter can't be active\n if type == \"myFilters\"\n target.removeClass(\"active\")\n\n toggleFilterSelection(type, id)\n\n $el.on \"click\", \".filter-list .single-filter .icon-delete\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n target = angular.element(event.currentTarget)\n customFilterName = target.parent().data('id')\n title = $translate.instant(\"ISSUES.FILTERS.CONFIRM_DELETE.TITLE\")\n message = $translate.instant(\"ISSUES.FILTERS.CONFIRM_DELETE.MESSAGE\", {customFilterName: customFilterName})\n\n $confirm.askOnDelete(title, message).then (askResponse) ->\n promise = $ctrl.deleteMyFilter(customFilterName)\n promise.then ->\n promise = $ctrl.loadMyFilters()\n promise.then (filters) ->\n askResponse.finish()\n $scope.filters.myFilters = filters\n renderFilters($scope.filters.myFilters)\n promise.then null, ->\n askResponse.finish()\n promise.then null, ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n\n $el.on \"click\", \".save-filters\", (event) ->\n event.preventDefault()\n renderFilters($scope.filters[\"myFilters\"])\n showFilters(\"My filters\", \"myFilters\")\n $el.find('.save-filters').hide()\n $el.find('.my-filter-name').removeClass(\"hidden\")\n $el.find('.my-filter-name').focus()\n $scope.$apply()\n\n $el.on \"keyup\", \".my-filter-name\", (event) ->\n event.preventDefault()\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n newFilter = target.val()\n currentLoading = $loading()\n .target($el.find(\".new\"))\n .start()\n promise = $ctrl.saveCurrentFiltersTo(newFilter)\n promise.then ->\n loadPromise = $ctrl.loadMyFilters()\n loadPromise.then (filters) ->\n currentLoading.finish()\n $scope.filters.myFilters = filters\n\n currentfilterstype = $el.find(\"h2 a.subfilter span.title\").prop('data-type')\n if currentfilterstype == \"myFilters\"\n renderFilters($scope.filters.myFilters)\n\n $el.find('.my-filter-name').addClass(\"hidden\")\n $el.find('.save-filters').show()\n\n loadPromise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\", \"Error loading custom filters\")\n\n promise.then null, ->\n currentLoading.finish()\n $el.find(\".my-filter-name\").val(newFilter).focus().select()\n $confirm.notify(\"error\", \"Filter not saved\")\n\n else if event.keyCode == 27\n $el.find('.my-filter-name').val('')\n $el.find('.my-filter-name').addClass(\"hidden\")\n $el.find('.save-filters').show()\n\n return {link:link}\n\nmodule.directive(\"tgIssuesFilters\", [\"$q\", \"$log\", \"$tgLocation\", \"$tgResources\", \"$tgConfirm\", \"$tgLoading\",\n \"$tgTemplate\", \"$translate\", \"$compile\", \"$tgAuth\", IssuesFiltersDirective])\n\n\n#############################################################################\n## Issue status Directive (popover for change status)\n#############################################################################\n\nIssueStatusInlineEditionDirective = ($repo, $template, $rootscope) ->\n ###\n Print the status of an Issue and a popover to change it.\n - tg-issue-status-inline-edition: The issue\n\n Example:\n\n div.status(tg-issue-status-inline-edition=\"issue\")\n a.issue-status(href=\"\")\n\n NOTE: This directive need 'issueStatusById' and 'project'.\n ###\n selectionTemplate = $template.get(\"issue/issue-status-inline-edition-selection.html\", true)\n\n updateIssueStatus = ($el, issue, issueStatusById) ->\n issueStatusDomParent = $el.find(\".issue-status\")\n issueStatusDom = $el.find(\".issue-status .issue-status-bind\")\n\n status = issueStatusById[issue.status]\n\n if status\n issueStatusDom.text(status.name)\n issueStatusDom.prop(\"title\", status.name)\n issueStatusDomParent.css('color', status.color)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n issue = $scope.$eval($attrs.tgIssueStatusInlineEdition)\n\n $el.on \"click\", \".issue-status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n\n for filter in $scope.filters.status\n if filter.id == issue.status\n filter.count--\n\n issue.status = target.data(\"status-id\")\n $el.find(\".pop-status\").popover().close()\n updateIssueStatus($el, issue, $scope.issueStatusById)\n\n $scope.$apply () ->\n $repo.save(issue).then ->\n $ctrl.loadIssues()\n\n for filter in $scope.filters.status\n if filter.id == issue.status\n filter.count++\n\n $rootscope.$broadcast(\"filters:issueupdate\", $scope.filters)\n\n taiga.bindOnce $scope, \"project\", (project) ->\n $el.append(selectionTemplate({ 'statuses': project.issue_statuses }))\n updateIssueStatus($el, issue, $scope.issueStatusById)\n\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_issue\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$watch $attrs.tgIssueStatusInlineEdition, (val) =>\n updateIssueStatus($el, val, $scope.issueStatusById)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgIssueStatusInlineEdition\", [\"$tgRepo\", \"$tgTemplate\", \"$rootScope\",\n IssueStatusInlineEditionDirective])\n\n\n#############################################################################\n## Issue assigned to Directive\n#############################################################################\n\nIssueAssignedToInlineEditionDirective = ($repo, $rootscope, popoverService) ->\n template = _.template(\"\"\"\n \" alt=\"<%- name %>\"/>\n
<%- name %>
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n updateIssue = (issue) ->\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\"}\n member = $scope.usersById[issue.assigned_to]\n if member\n ctx.imgurl = member.photo\n ctx.name = member.full_name_display\n\n $el.find(\".avatar\").html(template(ctx))\n $el.find(\".issue-assignedto\").attr('title', ctx.name)\n\n $ctrl = $el.controller()\n issue = $scope.$eval($attrs.tgIssueAssignedToInlineEdition)\n updateIssue(issue)\n\n $el.on \"click\", \".issue-assignedto\", (event) ->\n $rootscope.$broadcast(\"assigned-to:add\", issue)\n\n taiga.bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_issue\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$on \"assigned-to:added\", (ctx, userId, updatedIssue) =>\n if updatedIssue.id == issue.id\n updatedIssue.assigned_to = userId\n $repo.save(updatedIssue)\n updateIssue(updatedIssue)\n\n $scope.$watch $attrs.tgIssueAssignedToInlineEdition, (val) =>\n updateIssue(val)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgIssueAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\",\n IssueAssignedToInlineEditionDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/userstories/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaUserStories\")\n\n#############################################################################\n## User story Detail Controller\n#############################################################################\n\nclass UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @log, @appMetaService, @navUrls, @analytics, @translate) ->\n bindMethods(@)\n\n @scope.usRef = @params.usref\n @scope.sectionName = @translate.instant(\"US.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n @._setMeta()\n @.initializeOnDeleteGoToUrl()\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n totalTasks = @scope.tasks.length\n closedTasks = _.filter(@scope.tasks, (t) => @scope.taskStatusById[t.status].is_closed).length\n progressPercentage = if totalTasks > 0 then Math.round(100 * closedTasks / totalTasks) else 0\n\n title = @translate.instant(\"US.PAGE_TITLE\", {\n userStoryRef: \"##{@scope.us.ref}\"\n userStorySubject: @scope.us.subject\n projectName: @scope.project.name\n })\n description = @translate.instant(\"US.PAGE_DESCRIPTION\", {\n userStoryStatus: @scope.statusById[@scope.us.status]?.name or \"--\"\n userStoryPoints: @scope.us.total_points\n userStoryDescription: angular.element(@scope.us.description_html or \"\").text()\n userStoryClosedTasks: closedTasks\n userStoryTotalTasks: totalTasks\n userStoryProgressPercentage: progressPercentage\n })\n\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n @scope.$on \"related-tasks:update\", =>\n @scope.tasks = _.clone(@scope.tasks, false)\n\n @scope.$on \"attachment:create\", =>\n @analytics.trackEvent(\"attachment\", \"create\", \"create attachment on userstory\", 1)\n\n @scope.$on \"comment:new\", =>\n @.loadUs()\n\n initializeOnDeleteGoToUrl: ->\n ctx = {project: @scope.project.slug}\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project\", ctx)\n if @scope.project.is_backlog_activated\n if @scope.us.milestone\n ctx.sprint = @scope.sprint.slug\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-taskboard\", ctx)\n else\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-backlog\", ctx)\n else if @scope.project.is_kanban_activated\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-kanban\", ctx)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.statusList = project.us_statuses\n @scope.statusById = groupBy(project.us_statuses, (x) -> x.id)\n @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id)\n @scope.pointsList = _.sortBy(project.points, \"order\")\n @scope.pointsById = groupBy(@scope.pointsList, (e) -> e.id)\n return project\n\n loadUs: ->\n httpParams = _.pick(@location.search(), \"milestone\", \"no-milestone\", \"kanban-status\")\n milestone = httpParams.milestone\n if milestone\n @rs.userstories.storeQueryParams(@scope.projectId, {\n milestone: milestone\n order_by: \"sprint_order\"\n })\n\n noMilestone = httpParams[\"no-milestone\"]\n if noMilestone\n @rs.userstories.storeQueryParams(@scope.projectId, {\n milestone: \"null\"\n order_by: \"backlog_order\"\n })\n\n kanbanStaus = httpParams[\"kanban-status\"]\n if kanbanStaus\n @rs.userstories.storeQueryParams(@scope.projectId, {\n status: kanbanStaus\n order_by: \"kanban_order\"\n })\n\n\n\n return @rs.userstories.getByRef(@scope.projectId, @params.usref).then (us) =>\n @scope.us = us\n @scope.usId = us.id\n @scope.commentModel = us\n\n if @scope.us.neighbors.previous.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.us.neighbors.previous.ref\n }\n @scope.previousUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n\n if @scope.us.neighbors.next.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.us.neighbors.next.ref\n }\n @scope.nextUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n\n return us\n\n loadSprint: ->\n if @scope.us.milestone\n return @rs.sprints.get(@scope.us.project, @scope.us.milestone).then (sprint) =>\n @scope.sprint = sprint\n return sprint\n\n loadTasks: ->\n return @rs.tasks.list(@scope.projectId, null, @scope.usId).then (tasks) =>\n @scope.tasks = tasks\n return tasks\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()]))\n\n ###\n # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n # See app/modules/components/vote-button for more info\n ###\n onUpvote: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.upvote(@scope.usId).then(onSuccess, onError)\n\n onDownvote: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.downvote(@scope.usId).then(onSuccess, onError)\n\n ###\n # Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n # See app/modules/components/watch-button for more info\n ###\n onWatch: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.watch(@scope.usId).then(onSuccess, onError)\n\n onUnwatch: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.unwatch(@scope.usId).then(onSuccess, onError)\n\nmodule.controller(\"UserStoryDetailController\", UserStoryDetailController)\n\n\n#############################################################################\n## User story status display directive\n#############################################################################\n\nUsStatusDisplayDirective = ($template, $compile) ->\n # Display if a US is open or closed and its kanban status.\n #\n # Example:\n # tg-us-status-display(ng-model=\"us\")\n #\n # Requirements:\n # - US object (ng-model)\n # - scope.statusById object\n\n template = $template.get(\"common/components/status-display.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (us) ->\n status = $scope.statusById[us.status]\n\n html = template({\n is_closed: us.is_closed\n status: status\n })\n\n html = $compile(html)($scope)\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsStatusDisplay\", [\"$tgTemplate\", \"$compile\", UsStatusDisplayDirective])\n\n\n#############################################################################\n## User story related tasts progress splay Directive\n#############################################################################\n\nUsTasksProgressDisplayDirective = ($template, $compile) ->\n # Display a progress bar with the stats of completed tasks.\n #\n # Example:\n # tg-us-tasks-progress-display(ng-model=\"tasks\")\n #\n # Requirements:\n # - Task object list (ng-model)\n # - scope.taskStatusById object\n\n link = ($scope, $el, $attrs) ->\n render = (tasks) ->\n totalTasks = tasks.length\n totalClosedTasks = _.filter(tasks, (task) => $scope.taskStatusById[task.status].is_closed).length\n\n progress = if totalTasks > 0 then 100 * totalClosedTasks / totalTasks else 0\n\n _.assign($scope, {\n totalTasks: totalTasks\n totalClosedTasks: totalClosedTasks\n progress: progress,\n style: {\n width: progress + \"%\"\n }\n })\n\n $scope.$watch $attrs.ngModel, (tasks) ->\n render(tasks) if tasks?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n templateUrl: \"us/us-task-progress.html\"\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n scope: true\n }\n\nmodule.directive(\"tgUsTasksProgressDisplay\", [\"$tgTemplate\", \"$compile\", UsTasksProgressDisplayDirective])\n\n\n#############################################################################\n## User story status button directive\n#############################################################################\n\nUsStatusButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template) ->\n # Display the status of a US and you can edit it.\n #\n # Example:\n # tg-us-status-button(ng-model=\"us\")\n #\n # Requirements:\n # - Us object (ng-model)\n # - scope.statusById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"us/us-status-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n render = (us) =>\n status = $scope.statusById[us.status]\n\n html = template({\n status: status\n statuses: $scope.statusList\n editable: isEditable()\n })\n\n $el.html(html)\n\n save = $qqueue.bindAdd (status) =>\n us = $model.$modelValue.clone()\n\n us.status = status\n\n $.fn.popover().closeAll()\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(us)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n\n onError = ->\n $confirm.notify(\"error\")\n currentLoading.finish()\n\n $repo.save(us).then(onSuccess, onError)\n\n $el.on \"click\", \".status-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n status = target.data(\"status-id\")\n\n save(status)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\",\"$tgQqueue\", \"$tgTemplate\",\n UsStatusButtonDirective])\n\n\n#############################################################################\n## User story team requirements button directive\n#############################################################################\n\nUsTeamRequirementButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue, $template, $compile) ->\n template = $template.get(\"us/us-team-requirement-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n canEdit = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n render = (us) ->\n if not canEdit() and not us.team_requirement\n $el.html(\"\")\n return\n\n ctx = {\n canEdit: canEdit()\n isRequired: us.team_requirement\n }\n html = template(ctx)\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (team_requirement) =>\n us = $model.$modelValue.clone()\n us.team_requirement = team_requirement\n\n currentLoading = $loading()\n .target($el.find(\"label\"))\n .start()\n\n promise = $tgrepo.save(us)\n promise.then =>\n $model.$setViewValue(us)\n currentLoading.finish()\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n $el.on \"click\", \".team-requirement\", (event) ->\n return if not canEdit()\n\n team_requirement = not $model.$modelValue.team_requirement\n\n save(team_requirement)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsTeamRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", UsTeamRequirementButtonDirective])\n\n#############################################################################\n## User story client requirements button directive\n#############################################################################\n\nUsClientRequirementButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue, $template, $compile) ->\n template = $template.get(\"us/us-client-requirement-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n canEdit = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n render = (us) ->\n if not canEdit() and not us.client_requirement\n $el.html(\"\")\n return\n\n ctx = {\n canEdit: canEdit()\n isRequired: us.client_requirement\n }\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n save = $qqueue.bindAdd (client_requirement) =>\n us = $model.$modelValue.clone()\n us.client_requirement = client_requirement\n\n currentLoading = $loading()\n .target($el.find(\"label\"))\n .start()\n\n promise = $tgrepo.save(us)\n promise.then =>\n $model.$setViewValue(us)\n currentLoading.finish()\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $confirm.notify(\"error\")\n\n $el.on \"click\", \".client-requirement\", (event) ->\n return if not canEdit()\n\n client_requirement = not $model.$modelValue.client_requirement\n save(client_requirement)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsClientRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\",\n UsClientRequirementButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/tasks/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaTasks\")\n\n\n#############################################################################\n## Task Detail Controller\n#############################################################################\n\nclass TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @log, @appMetaService, @navUrls, @analytics, @translate) ->\n bindMethods(@)\n\n @scope.taskRef = @params.taskref\n @scope.sectionName = @translate.instant(\"TASK.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n promise.then () =>\n @._setMeta()\n @.initializeOnDeleteGoToUrl()\n\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n title = @translate.instant(\"TASK.PAGE_TITLE\", {\n taskRef: \"##{@scope.task.ref}\"\n taskSubject: @scope.task.subject\n projectName: @scope.project.name\n })\n description = @translate.instant(\"TASK.PAGE_DESCRIPTION\", {\n taskStatus: @scope.statusById[@scope.task.status]?.name or \"--\"\n taskDescription: angular.element(@scope.task.description_html or \"\").text()\n })\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n @scope.$on \"attachment:create\", =>\n @analytics.trackEvent(\"attachment\", \"create\", \"create attachment on task\", 1)\n @scope.$on \"custom-attributes-values:edit\", =>\n @rootscope.$broadcast(\"object:updated\")\n @scope.$on \"comment:new\", =>\n @.loadTask()\n\n initializeOnDeleteGoToUrl: ->\n ctx = {project: @scope.project.slug}\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project\", ctx)\n if @scope.project.is_backlog_activated\n if @scope.task.milestone\n ctx.sprint = @scope.sprint.slug\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-taskboard\", ctx)\n else if @scope.task.us\n ctx.ref = @scope.us.ref\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n else if @scope.project.is_kanban_activated\n if @scope.us\n ctx.ref = @scope.us.ref\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.statusList = project.task_statuses\n @scope.statusById = groupBy(project.task_statuses, (x) -> x.id)\n return project\n\n loadTask: ->\n return @rs.tasks.getByRef(@scope.projectId, @params.taskref).then (task) =>\n @scope.task = task\n @scope.taskId = task.id\n @scope.commentModel = task\n\n if @scope.task.neighbors.previous.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.task.neighbors.previous.ref\n }\n @scope.previousUrl = @navUrls.resolve(\"project-tasks-detail\", ctx)\n\n if @scope.task.neighbors.next.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.task.neighbors.next.ref\n }\n @scope.nextUrl = @navUrls.resolve(\"project-tasks-detail\", ctx)\n return task\n\n loadSprint: ->\n if @scope.task.milestone\n return @rs.sprints.get(@scope.task.project, @scope.task.milestone).then (sprint) =>\n @scope.sprint = sprint\n return sprint\n\n loadUserStory: ->\n if @scope.task.user_story\n return @rs.userstories.get(@scope.task.project, @scope.task.user_story).then (us) =>\n @scope.us = us\n return us\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()]))\n\n ###\n # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n # See app/modules/components/vote-button for more info\n ###\n onUpvote: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.upvote(@scope.taskId).then(onSuccess, onError)\n\n onDownvote: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.downvote(@scope.taskId).then(onSuccess, onError)\n\n ###\n # Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n # See app/modules/components/watch-button for more info\n ###\n onWatch: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.watch(@scope.taskId).then(onSuccess, onError)\n\n onUnwatch: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.unwatch(@scope.taskId).then(onSuccess, onError)\n\nmodule.controller(\"TaskDetailController\", TaskDetailController)\n\n\n#############################################################################\n## Task status display directive\n#############################################################################\n\nTaskStatusDisplayDirective = ($template, $compile) ->\n # Display if a Task is open or closed and its taskboard status.\n #\n # Example:\n # tg-task-status-display(ng-model=\"task\")\n #\n # Requirements:\n # - Task object (ng-model)\n # - scope.statusById object\n\n template = $template.get(\"common/components/status-display.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (task) ->\n status = $scope.statusById[task.status]\n\n html = template({\n is_closed: status.is_closed\n status: status\n })\n\n html = $compile(html)($scope)\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (task) ->\n render(task) if task?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgTaskStatusDisplay\", [\"$tgTemplate\", \"$compile\", TaskStatusDisplayDirective])\n\n\n#############################################################################\n## Task status button directive\n#############################################################################\n\nTaskStatusButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $compile, $translate, $template) ->\n # Display the status of Task and you can edit it.\n #\n # Example:\n # tg-task-status-button(ng-model=\"task\")\n #\n # Requirements:\n # - Task object (ng-model)\n # - scope.statusById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"us/us-status-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_task\") != -1\n\n render = (task) =>\n status = $scope.statusById[task.status]\n\n html = $compile(template({\n status: status\n statuses: $scope.statusList\n editable: isEditable()\n }))($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (status) =>\n task = $model.$modelValue.clone()\n task.status = status\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $model.$setViewValue(task)\n $confirm.notify(\"success\")\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n\n onError = ->\n $confirm.notify(\"error\")\n currentLoading.finish()\n\n $repo.save(task).then(onSuccess, onError)\n\n $el.on \"click\", \".status-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n\n $.fn.popover().closeAll()\n\n save(target.data(\"status-id\"))\n\n $scope.$watch $attrs.ngModel, (task) ->\n render(task) if task\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgTaskStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\",\n \"$compile\", \"$translate\", \"$tgTemplate\", TaskStatusButtonDirective])\n\n\nTaskIsIocaineButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue, $compile) ->\n template = _.template(\"\"\"\n
\n \n \n
\n \"\"\")\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_task\") != -1\n\n render = (task) ->\n if not isEditable() and not task.is_iocaine\n $el.html(\"\")\n return\n\n ctx = {\n isIocaine: task.is_iocaine\n isEditable: isEditable()\n }\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n save = $qqueue.bindAdd (is_iocaine) =>\n task = $model.$modelValue.clone()\n task.is_iocaine = is_iocaine\n\n currentLoading = $loading()\n .target($el.find('label'))\n .start()\n\n promise = $tgrepo.save(task)\n\n promise.then ->\n $model.$setViewValue(task)\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $confirm.notify(\"error\")\n\n promise.finally ->\n currentLoading.finish()\n\n $el.on \"click\", \".is-iocaine\", (event) ->\n return if not isEditable()\n\n is_iocaine = not $model.$modelValue.is_iocaine\n save(is_iocaine)\n\n $scope.$watch $attrs.ngModel, (task) ->\n render(task) if task\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgTaskIsIocaineButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\",\n \"$compile\", TaskIsIocaineButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/team/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\n\nmodule = angular.module(\"taigaTeam\")\n\n#############################################################################\n## Team Controller\n#############################################################################\n\nclass TeamController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$location\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$tgAuth\",\n \"$translate\",\n \"tgProjectService\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appMetaService, @auth,\n @translate, @projectService) ->\n @scope.sectionName = \"TEAM.SECTION_NAME\"\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"TEAM.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"TEAM.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n setRole: (role) ->\n if role\n @scope.filtersRole = role\n else\n @scope.filtersRole = null\n\n loadMembers: ->\n user = @auth.getUser()\n\n # Calculate totals\n @scope.totals = {}\n for member in @scope.activeUsers\n @scope.totals[member.id] = 0\n\n # Get current user\n @scope.currentUser = _.find(@scope.activeUsers, {id: user?.id})\n\n # Get member list without current user\n @scope.memberships = _.reject(@scope.activeUsers, {id: user?.id})\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n\n @scope.issuesEnabled = project.is_issues_activated\n @scope.tasksEnabled = project.is_kanban_activated or project.is_backlog_activated\n @scope.wikiEnabled = project.is_wiki_activated\n\n return project\n\n loadMemberStats: ->\n return @rs.projects.memberStats(@scope.projectId).then (stats) =>\n totals = {}\n _.forEach @scope.totals, (total, userId) =>\n vals = _.map(stats, (memberStats, statsKey) -> memberStats[userId])\n total = _.reduce(vals, (sum, el) -> sum + el)\n @scope.totals[userId] = total\n\n @scope.stats = @._processStats(stats)\n @scope.stats.totals = @scope.totals\n\n _processStat: (stat) ->\n max = _.max(stat)\n min = _.min(stat)\n singleStat = _.map stat, (value, key) ->\n if value == min\n return [key, 0.1]\n if value == max\n return [key, 1]\n return [key, (value * 0.5) / max]\n singleStat = _.object(singleStat)\n return singleStat\n\n _processStats: (stats) ->\n for key,value of stats\n stats[key] = @._processStat(value)\n return stats\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadMembers()\n return @.loadMemberStats()\n\nmodule.controller(\"TeamController\", TeamController)\n\n\n#############################################################################\n## Team Filters Directive\n#############################################################################\n\nTeamFiltersDirective = () ->\n return {\n templateUrl: \"team/team-filter.html\"\n }\n\nmodule.directive(\"tgTeamFilters\", [TeamFiltersDirective])\n\n\n#############################################################################\n## Team Member Stats Directive\n#############################################################################\n\nTeamMemberStatsDirective = () ->\n return {\n templateUrl: \"team/team-member-stats.html\",\n scope: {\n stats: \"=\",\n userId: \"=user\"\n issuesEnabled: \"=issuesenabled\"\n tasksEnabled: \"=tasksenabled\"\n wikiEnabled: \"=wikienabled\"\n }\n }\n\nmodule.directive(\"tgTeamMemberStats\", TeamMemberStatsDirective)\n\n\n#############################################################################\n## Team Current User Directive\n#############################################################################\n\nTeamMemberCurrentUserDirective = () ->\n return {\n templateUrl: \"team/team-member-current-user.html\"\n scope: {\n projectId: \"=projectid\",\n currentUser: \"=currentuser\",\n stats: \"=\"\n issuesEnabled: \"=issuesenabled\"\n tasksEnabled: \"=tasksenabled\"\n wikiEnabled: \"=wikienabled\"\n }\n }\n\nmodule.directive(\"tgTeamCurrentUser\", TeamMemberCurrentUserDirective)\n\n\n#############################################################################\n## Team Members Directive\n#############################################################################\n\nTeamMembersDirective = () ->\n template = \"team/team-members.html\"\n\n return {\n templateUrl: template\n scope: {\n memberships: \"=\",\n filtersQ: \"=filtersq\",\n filtersRole: \"=filtersrole\",\n stats: \"=\"\n issuesEnabled: \"=issuesenabled\"\n tasksEnabled: \"=tasksenabled\"\n wikiEnabled: \"=wikienabled\"\n }\n }\n\nmodule.directive(\"tgTeamMembers\", TeamMembersDirective)\n\n\n#############################################################################\n## Leave project Directive\n#############################################################################\n\nLeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.leave = () ->\n leave_project_text = $translate.instant(\"TEAM.ACTION_LEAVE_PROJECT\")\n confirm_leave_project_text = $translate.instant(\"TEAM.CONFIRM_LEAVE_PROJECT\")\n\n $confirm.ask(leave_project_text, confirm_leave_project_text).then (response) =>\n promise = $rs.projects.leave($attrs.projectid)\n\n promise.then =>\n response.finish()\n $confirm.notify(\"success\")\n $location.path($navurls.resolve(\"home\"))\n\n promise.then null, (response) ->\n response.finish()\n $confirm.notify('error', response.data._error_message)\n\n return {\n scope: {},\n templateUrl: \"team/leave-project.html\",\n link: link\n }\n\nmodule.directive(\"tgLeaveProject\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgResources\", \"$tgNavUrls\", \"$translate\",\n LeaveProjectDirective])\n\n\n#############################################################################\n## Team Filters\n#############################################################################\n\nmembersFilter = ->\n return (members, filtersQ, filtersRole) ->\n return _.filter members, (m) -> (not filtersRole or m.role == filtersRole.id) and\n (not filtersQ or m.full_name.search(new RegExp(filtersQ, \"i\")) >= 0)\n\nmodule.filter('membersFilter', membersFilter)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/wiki/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaWiki\")\n\n#############################################################################\n## Wiki Detail Controller\n#############################################################################\n\nclass WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgModel\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$filter\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @model, @confirm, @rs, @params, @q, @location,\n @filter, @log, @appMetaService, @navUrls, @analytics, @translate) ->\n @scope.projectSlug = @params.pslug\n @scope.wikiSlug = @params.slug\n @scope.wikiTitle = @scope.wikiSlug\n @scope.sectionName = \"Wiki\"\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then () => @._setMeta()\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n title = @translate.instant(\"WIKI.PAGE_TITLE\", {\n wikiPageName: @scope.wikiTitle\n projectName: @scope.project.name\n })\n description = @translate.instant(\"WIKI.PAGE_DESCRIPTION\", {\n wikiPageContent: angular.element(@scope.wiki.html or \"\").text()\n totalEditions: @scope.wiki.editions or 0\n lastModifiedDate: moment(@scope.wiki.modified_date).format(@translate.instant(\"WIKI.DATETIME\"))\n })\n @appMetaService.setAll(title, description)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_wiki_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadWiki: ->\n promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug)\n promise.then (wiki) =>\n @scope.wiki = wiki\n @scope.wikiId = wiki.id\n return @scope.wiki\n\n promise.then null, (xhr) =>\n @scope.wikiId = null\n\n if @scope.project.my_permissions.indexOf(\"add_wiki_page\") == -1\n return null\n\n data = {\n project: @scope.projectId\n slug: @scope.wikiSlug\n content: \"\"\n }\n @scope.wiki = @model.make_model(\"wiki\", data)\n return @scope.wiki\n\n loadWikiLinks: ->\n return @rs.wiki.listLinks(@scope.projectId).then (wikiLinks) =>\n @scope.wikiLinks = wikiLinks\n selectedWikiLink = _.find(wikiLinks, {href: @scope.wikiSlug})\n @scope.wikiTitle = selectedWikiLink.title if selectedWikiLink?\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @q.all([@.loadWikiLinks(), @.loadWiki()]).then () =>\n\n\n delete: ->\n title = @translate.instant(\"WIKI.DELETE_LIGHTBOX_TITLE\")\n message = @scope.wikiTitle\n\n @confirm.askOnDelete(title, message).then (askResponse) =>\n onSuccess = =>\n askResponse.finish()\n ctx = {project: @scope.projectSlug}\n @location.path(@navUrls.resolve(\"project-wiki\", ctx))\n @confirm.notify(\"success\")\n\n onError = =>\n askResponse.finish(false)\n @confirm.notify(\"error\")\n\n @repo.remove(@scope.wiki).then onSuccess, onError\n\nmodule.controller(\"WikiDetailController\", WikiDetailController)\n\n\n#############################################################################\n## Wiki Summary Directive\n#############################################################################\n\nWikiSummaryDirective = ($log, $template, $compile, $translate) ->\n template = $template.get(\"wiki/wiki-summary.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n render = (wiki) ->\n if not $scope.usersById?\n $log.error \"WikiSummaryDirective requires userById set in scope.\"\n else\n user = $scope.usersById[wiki.last_modifier]\n\n if user is undefined\n user = {name: \"unknown\", imgUrl: \"/images/user-noimage.png\"}\n else\n user = {name: user.full_name_display, imgUrl: user.photo}\n\n ctx = {\n totalEditions: wiki.editions\n lastModifiedDate: moment(wiki.modified_date).format($translate.instant(\"WIKI.DATETIME\"))\n user: user\n }\n html = template(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (wikiPage) ->\n return if not wikiPage\n render(wikiPage)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgWikiSummary\", [\"$log\", \"$tgTemplate\", \"$compile\", \"$translate\", WikiSummaryDirective])\n\n\n#############################################################################\n## Editable Wiki Content Directive\n#############################################################################\n\nEditableWikiContentDirective = ($window, $document, $repo, $confirm, $loading, $analytics, $qqueue) ->\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_wiki_page\") != -1\n\n switchToEditMode = ->\n $el.find('.edit-wiki-content').show()\n $el.find('.view-wiki-content').hide()\n $el.find('textarea').focus()\n\n switchToReadMode = ->\n $el.find('.edit-wiki-content').hide()\n $el.find('.view-wiki-content').show()\n\n disableEdition = ->\n $el.find(\".view-wiki-content .edit\").remove()\n $el.find(\".edit-wiki-content\").remove()\n\n cancelEdition = ->\n return if not $model.$modelValue.id\n\n $scope.$apply () =>\n $model.$modelValue.revert()\n switchToReadMode()\n\n getSelectedText = ->\n if $window.getSelection\n return $window.getSelection().toString()\n else if $document.selection\n return $document.selection.createRange().text\n return null\n\n save = $qqueue.bindAdd (wiki) ->\n onSuccess = (wikiPage) ->\n if not wiki.id?\n $analytics.trackEvent(\"wikipage\", \"create\", \"create wiki page\", 1)\n\n $model.$setViewValue wikiPage.clone()\n\n $confirm.notify(\"success\")\n switchToReadMode()\n\n onError = ->\n $confirm.notify(\"error\")\n\n currentLoading = $loading()\n .removeClasses(\"icon-floppy\")\n .target($el.find('.icon-floppy'))\n .start()\n\n if wiki.id?\n promise = $repo.save(wiki).then(onSuccess, onError)\n else\n promise = $repo.create(\"wiki\", wiki).then(onSuccess, onError)\n\n promise.finally ->\n currentLoading.finish()\n\n $el.on \"click\", \"a\", (event) ->\n target = angular.element(event.target)\n href = target.attr('href')\n if href.indexOf(\"#\") == 0\n event.preventDefault()\n $('body').scrollTop($(href).offset().top)\n\n $el.on \"mousedown\", \".view-wiki-content\", (event) ->\n target = angular.element(event.target)\n return if not isEditable()\n return if event.button == 2\n\n $el.on \"mouseup\", \".view-wiki-content\", (event) ->\n target = angular.element(event.target)\n return if getSelectedText()\n return if not isEditable()\n return if target.is('a')\n return if target.is('pre')\n\n switchToEditMode()\n\n $el.on \"click\", \".save\", debounce 2000, ->\n save($scope.wiki)\n\n $el.on \"click\", \".cancel\", ->\n cancelEdition()\n\n $el.on \"keydown\", \"textarea\", (event) ->\n if event.keyCode == 27\n cancelEdition()\n\n $scope.$watch $attrs.ngModel, (wikiPage) ->\n return if not wikiPage\n\n if isEditable()\n $el.addClass('editable')\n if not wikiPage.id? or $.trim(wikiPage.content).length == 0\n switchToEditMode()\n else\n disableEdition()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n templateUrl: \"wiki/editable-wiki-content.html\"\n }\n\nmodule.directive(\"tgEditableWikiContent\", [\"$window\", \"$document\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\",\n \"$tgAnalytics\", \"$tgQqueue\", EditableWikiContentDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/wiki/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaWiki\")\n\n\n#############################################################################\n## Wiki Main Directive\n#############################################################################\n\nWikiNavDirective = ($tgrepo, $log, $location, $confirm, $navUrls, $analytics, $loading, $template, $compile, $translate) ->\n template = $template.get(\"wiki/wiki-nav.html\", true)\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n if not $attrs.ngModel?\n return $log.error \"WikiNavDirective: no ng-model attr is defined\"\n\n render = (wikiLinks) ->\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1\n deleteWikiLinkPermission = $scope.project.my_permissions.indexOf(\"delete_wiki_link\") > -1\n\n html = template({\n wikiLinks: wikiLinks,\n projectSlug: $scope.projectSlug\n addWikiLinkPermission: addWikiLinkPermission\n deleteWikiLinkPermission: deleteWikiLinkPermission\n })\n\n html = $compile(html)($scope)\n\n $el.off()\n $el.html(html)\n\n $el.on \"click\", \".wiki-link .link-title\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n linkId = target.parents('.wiki-link').data('id')\n linkSlug = $scope.wikiLinks[linkId].href\n $scope.$apply ->\n ctx = {\n project: $scope.projectSlug\n slug: linkSlug\n }\n $location.path($navUrls.resolve(\"project-wiki-page\", ctx))\n\n $el.on \"click\", \".add-button\", (event) ->\n event.preventDefault()\n $el.find(\".new\").removeClass(\"hidden\")\n $el.find(\".new input\").focus()\n $el.find(\".add-button\").hide()\n\n $el.on \"click\", \".wiki-link .icon-delete\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n linkId = target.parents('.wiki-link').data('id')\n\n title = $translate.instant(\"WIKI.DELETE_LIGHTBOX_TITLE\")\n message = $scope.wikiLinks[linkId].title\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n promise = $tgrepo.remove($scope.wikiLinks[linkId])\n promise.then ->\n promise = $ctrl.loadWikiLinks()\n promise.then ->\n askResponse.finish()\n render($scope.wikiLinks)\n promise.then null, ->\n askResponse.finish()\n promise.then null, ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $el.on \"keyup\", \".new input\", (event) ->\n event.preventDefault()\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n newLink = target.val()\n\n currentLoading = $loading()\n .target($el.find(\".new\"))\n .start()\n\n promise = $tgrepo.create(\"wiki-links\", {project: $scope.projectId, title: newLink})\n promise.then ->\n $analytics.trackEvent(\"wikilink\", \"create\", \"create wiki link\", 1)\n loadPromise = $ctrl.loadWikiLinks()\n loadPromise.then ->\n currentLoading.finish()\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new input\").val('')\n $el.find(\".add-button\").show()\n render($scope.wikiLinks)\n loadPromise.then null, ->\n currentLoading.finish()\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new input\").val('')\n $el.find(\".add-button\").show()\n $confirm.notify(\"error\", \"Error loading wiki links\")\n\n promise.then null, (error) ->\n currentLoading.finish()\n $el.find(\".new input\").val(newLink)\n $el.find(\".new input\").focus().select()\n if error?.__all__?[0]?\n $confirm.notify(\"error\", \"The link already exists\")\n else\n $confirm.notify(\"error\")\n\n else if event.keyCode == 27\n target = angular.element(event.currentTarget)\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new input\").val('')\n $el.find(\".add-button\").show()\n\n\n bindOnce($scope, $attrs.ngModel, render)\n\n return {link:link}\n\nmodule.directive(\"tgWikiNav\", [\"$tgRepo\", \"$log\", \"$tgLocation\", \"$tgConfirm\", \"$tgNavUrls\",\n \"$tgAnalytics\", \"$tgLoading\", \"$tgTemplate\", \"$compile\", \"$translate\", WikiNavDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/lightboxes.coffee\n###\n\ntaiga = @.taiga\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaKanban\")\n\nMAX_MEMBERSHIP_FIELDSETS = 4\n\n#############################################################################\n## Create Members Lightbox Directive\n#############################################################################\n\nCreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService, $compile) ->\n extraTextTemplate = \"\"\"\n
\n \n
\n \"\"\"\n\n template = _.template(\"\"\"\n
\n
\n data-required=\"true\" <% } %> data-type=\"email\" />\n
\n
\n \n \n
\n
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n createFieldSet = (required = true)->\n ctx = {roleList: $scope.project.roles, required: required}\n return $compile(template(ctx))($scope)\n\n resetForm = ->\n $el.find(\"form textarea\").remove()\n $el.find(\"form .add-member-wrapper\").remove()\n\n invitations = $el.find(\".add-member-forms\")\n invitations.html($compile(extraTextTemplate)($scope))\n\n fieldSet = createFieldSet()\n invitations.prepend(fieldSet)\n\n $scope.$on \"membersform:new\", ->\n resetForm()\n lightboxService.open($el)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $el.on \"click\", \".delete-fieldset\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n fieldSet = target.closest('.add-member-wrapper')\n\n fieldSet.remove()\n\n lastActionButton = $el.find(\".add-member-wrapper fieldset:last > a\")\n if lastActionButton.hasClass(\"icon-delete delete-fieldset\")\n lastActionButton.removeClass(\"icon-delete delete-fieldset\")\n .addClass(\"icon-plus add-fieldset\")\n\n $el.on \"click\", \".add-fieldset\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n fieldSet = target.closest('.add-member-wrapper')\n\n target.removeClass(\"icon-plus add-fieldset\")\n .addClass(\"icon-delete delete-fieldset\")\n\n newFieldSet = createFieldSet(false)\n fieldSet.after(newFieldSet)\n\n $scope.$digest() # To compile newFieldSet and translate text\n\n if $el.find(\".add-member-wrapper\").length == MAX_MEMBERSHIP_FIELDSETS\n $el.find(\".add-member-wrapper fieldset:last > a\").removeClass(\"icon-plus add-fieldset\")\n .addClass(\"icon-delete delete-fieldset\")\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n onSuccess = (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $confirm.notify(\"success\")\n $rootScope.$broadcast(\"membersform:new:success\")\n\n onError = (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $confirm.notify(\"error\")\n $rootScope.$broadcast(\"membersform:new:error\")\n\n form = $el.find(\"form\").checksley()\n\n #checksley find new fields\n form.destroy()\n form.initialize()\n if not form.validate()\n return\n\n memberWrappers = $el.find(\"form .add-member-wrapper\")\n memberWrappers = _.filter memberWrappers, (mw) ->\n angular.element(mw).find(\"input\").hasClass('checksley-ok')\n\n invitations = _.map memberWrappers, (mw) ->\n memberWrapper = angular.element(mw)\n email = memberWrapper.find(\"input\")\n role = memberWrapper.find(\"select\")\n\n return {\n email: email.val()\n role_id: role.val()\n }\n\n if invitations.length\n invitation_extra_text = $el.find(\"form textarea\").val()\n\n promise = $rs.memberships.bulkCreateMemberships($scope.project.id,\n invitations, invitation_extra_text)\n promise.then(onSuccess, onError)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateMembers\", [\"$tgResources\", \"$rootScope\", \"$tgConfirm\", \"$tgLoading\",\n \"lightboxService\", \"$compile\", CreateMembersDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/memberships.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Project Memberships Controller\n#############################################################################\n\nclass MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @analytics,\n @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.project = {}\n @scope.filters = {}\n\n promise = @.loadInitialData()\n\n promise.then =>\n title = @translate.instant(\"ADMIN.MEMBERSHIPS.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"membersform:new:success\", =>\n @.loadMembers()\n @analytics.trackEvent(\"membership\", \"create\", \"create memberships on admin\", 1)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadMembers: ->\n httpFilters = @.getUrlFilters()\n return @rs.memberships.list(@scope.projectId, httpFilters).then (data) =>\n @scope.memberships = _.filter(data.models, (membership) ->\n membership.user == null or membership.is_user_active)\n\n @scope.page = data.current\n @scope.count = data.count\n @scope.paginatedBy = data.paginatedBy\n return data\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then =>\n @.loadMembers()\n\n return promise\n\n getUrlFilters: ->\n filters = _.pick(@location.search(), \"page\")\n filters.page = 1 if not filters.page\n return filters\n\n addNewMembers: ->\n @rootscope.$broadcast(\"membersform:new\")\n\n\nmodule.controller(\"MembershipsController\", MembershipsController)\n\n\n#############################################################################\n## Member Avatar Directive\n#############################################################################\n\nMembershipsDirective = ($template, $compile) ->\n template = $template.get(\"admin/admin-membership-paginator.html\", true)\n\n linkPagination = ($scope, $el, $attrs, $ctrl) ->\n # Constants\n afterCurrent = 2\n beforeCurrent = 4\n atBegin = 2\n atEnd = 2\n\n $pagEl = $el.find(\".memberships-paginator\")\n\n getNumPages = ->\n numPages = $scope.count / $scope.paginatedBy\n if parseInt(numPages, 10) < numPages\n numPages = parseInt(numPages, 10) + 1\n else\n numPages = parseInt(numPages, 10)\n\n return numPages\n\n renderPagination = ->\n numPages = getNumPages()\n\n if numPages <= 1\n $pagEl.hide()\n return\n\n pages = []\n options = {}\n options.pages = pages\n options.showPrevious = ($scope.page > 1)\n options.showNext = not ($scope.page == numPages)\n\n cpage = $scope.page\n\n for i in [1..numPages]\n if i == (cpage + afterCurrent) and numPages > (cpage + afterCurrent + atEnd)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i == (cpage - beforeCurrent) and cpage > (atBegin + beforeCurrent)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i > (cpage + afterCurrent) and i <= (numPages - atEnd)\n else if i < (cpage - beforeCurrent) and i > atBegin\n else if i == cpage\n pages.push({classes: \"active\", num: i, type: \"page-active\"})\n else\n pages.push({classes: \"page\", num: i, type: \"page\"})\n\n html = template(options)\n html = $compile(html)($scope)\n\n $pagEl.html(html)\n $pagEl.show()\n\n $scope.$watch \"memberships\", (value) ->\n # Do nothing if value is not logical true\n return if not value\n\n renderPagination()\n\n $el.on \"click\", \".memberships-paginator a.next\", (event) ->\n event.preventDefault()\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page + 1)\n $ctrl.loadMembers()\n\n $el.on \"click\", \".memberships-paginator a.previous\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page - 1)\n $ctrl.loadMembers()\n\n $el.on \"click\", \".memberships-paginator li.page > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n pagenum = target.data(\"pagenum\")\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", pagenum)\n $ctrl.loadMembers()\n\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n linkPagination($scope, $el, $attrs, $ctrl)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgMemberships\", [\"$tgTemplate\", \"$compile\", MembershipsDirective])\n\n\n#############################################################################\n## Member Avatar Directive\n#############################################################################\n\nMembershipsRowAvatarDirective = ($log, $template, $translate) ->\n template = $template.get(\"admin/memberships-row-avatar.html\", true)\n\n link = ($scope, $el, $attrs) ->\n pending = $translate.instant(\"ADMIN.MEMBERSHIP.STATUS_PENDING\")\n render = (member) ->\n ctx = {\n full_name: if member.full_name then member.full_name else \"\"\n email: if member.user_email then member.user_email else member.email\n imgurl: if member.photo then member.photo else \"/images/unnamed.png\"\n pending: if !member.is_user_active then pending else \"\"\n }\n\n html = template(ctx)\n $el.html(html)\n\n if not $attrs.tgMembershipsRowAvatar?\n return $log.error \"MembershipsRowAvatarDirective: the directive need a member\"\n\n member = $scope.$eval($attrs.tgMembershipsRowAvatar)\n render(member)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowAvatar\", [\"$log\", \"$tgTemplate\", '$translate', MembershipsRowAvatarDirective])\n\n\n#############################################################################\n## Member IsAdminCheckbox Directive\n#############################################################################\n\nMembershipsRowAdminCheckboxDirective = ($log, $repo, $confirm, $template, $compile) ->\n template = $template.get(\"admin/admin-memberships-row-checkbox.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (member) ->\n ctx = {inputId: \"is-admin-#{member.id}\"}\n\n html = template(ctx)\n html = $compile(html)($scope)\n\n $el.html(html)\n\n if not $attrs.tgMembershipsRowAdminCheckbox?\n return $log.error \"MembershipsRowAdminCheckboxDirective: the directive need a member\"\n\n member = $scope.$eval($attrs.tgMembershipsRowAdminCheckbox)\n html = render(member)\n\n if member.is_owner\n $el.find(\":checkbox\").prop(\"checked\", true)\n\n $el.on \"click\", \":checkbox\", (event) =>\n onSuccess = ->\n $confirm.notify(\"success\")\n\n onError = (data) ->\n member.revert()\n $el.find(\":checkbox\").prop(\"checked\", member.is_owner)\n $confirm.notify(\"error\", data.is_owner[0])\n\n target = angular.element(event.currentTarget)\n member.is_owner = target.prop(\"checked\")\n $repo.save(member).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowAdminCheckbox\", [\"$log\", \"$tgRepo\", \"$tgConfirm\",\n \"$tgTemplate\", \"$compile\", MembershipsRowAdminCheckboxDirective])\n\n\n#############################################################################\n## Member RoleSelector Directive\n#############################################################################\n\nMembershipsRowRoleSelectorDirective = ($log, $repo, $confirm) ->\n template = _.template(\"\"\"\n \n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n render = (member) ->\n ctx = {\n roleList: $scope.project.roles,\n selectedRole: member.role\n }\n\n html = template(ctx)\n $el.html(html)\n\n if not $attrs.tgMembershipsRowRoleSelector?\n return $log.error \"MembershipsRowRoleSelectorDirective: the directive need a member\"\n\n $ctrl = $el.controller()\n member = $scope.$eval($attrs.tgMembershipsRowRoleSelector)\n html = render(member)\n\n $el.on \"change\", \"select\", (event) =>\n onSuccess = ->\n $confirm.notify(\"success\")\n\n onError = ->\n $confirm.notify(\"error\")\n\n target = angular.element(event.currentTarget)\n newRole = parseInt(target.val(), 10)\n\n if member.role != newRole\n member.role = newRole\n $repo.save(member).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowRoleSelector\", [\"$log\", \"$tgRepo\", \"$tgConfirm\",\n MembershipsRowRoleSelectorDirective])\n\n\n#############################################################################\n## Member Actions Directive\n#############################################################################\n\nMembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $translate) ->\n activedTemplate = \"\"\"\n
\n
\n \n \n \n \"\"\"\n\n pendingTemplate = \"\"\"\n \n {{'ADMIN.MEMBERSHIP.RESEND' | translate}}\n \n \n \n \n \"\"\"\n\n link = ($scope, $el, $attrs) ->\n render = (member) ->\n if member.user\n html = $compile(activedTemplate)($scope)\n else\n html = $compile(pendingTemplate)($scope)\n\n $el.html(html)\n\n if not $attrs.tgMembershipsRowActions?\n return $log.error \"MembershipsRowActionsDirective: the directive need a member\"\n\n $ctrl = $el.controller()\n member = $scope.$eval($attrs.tgMembershipsRowActions)\n render(member)\n\n $el.on \"click\", \".pending\", (event) ->\n event.preventDefault()\n onSuccess = ->\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_SEND_INVITATION\", {\n email: $scope.member.email\n })\n $confirm.notify(\"success\", text)\n onError = ->\n text = $translate.instant(\"ADMIM.MEMBERSHIP.ERROR_SEND_INVITATION\")\n $confirm.notify(\"error\", text)\n\n $rs.memberships.resendInvitation($scope.member.id).then(onSuccess, onError)\n\n $el.on \"click\", \".delete\", (event) ->\n event.preventDefault()\n\n title = $translate.instant(\"ADMIN.MEMBERSHIP.DELETE_MEMBER\")\n defaultMsg = $translate.instant(\"ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE\", {email: member.email})\n message = if member.user then member.full_name else defaultMsg\n\n $confirm.askOnDelete(title, message).then (askResponse) ->\n onSuccess = =>\n askResponse.finish()\n\n if $scope.page > 1 && ($scope.count - 1) <= $scope.paginatedBy\n $ctrl.selectFilter(\"page\", $scope.page - 1)\n\n $ctrl.loadMembers()\n\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_DELETE\")\n $confirm.notify(\"success\", null, text)\n\n onError = =>\n askResponse.finish(false)\n\n text = $translate.instant(\"ADMIN.MEMBERSHIP.ERROR_DELETE\", {message: message})\n $confirm.notify(\"error\", null, text)\n\n $repo.remove(member).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowActions\", [\"$log\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$compile\",\n \"$translate\", MembershipsRowActionsDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/nav.coffee\n###\n\nAdminNavigationDirective = ->\n link = ($scope, $el, $attrs) ->\n section = $attrs.tgAdminNavigation\n $el.find(\".active\").removeClass(\"active\")\n $el.find(\"#adminmenu-#{section} a\").addClass(\"active\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule = angular.module(\"taigaAdmin\")\nmodule.directive(\"tgAdminNavigation\", AdminNavigationDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/project-profile.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntrim = @.taiga.trim\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Project Profile Controller\n#############################################################################\n\nclass ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @appMetaService, @translate) ->\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then =>\n sectionName = @translate.instant( @scope.sectionName)\n title = @translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName, projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"project:loaded\", =>\n sectionName = @translate.instant(@scope.sectionName)\n title = @translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName, projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.pointsList = _.sortBy(project.points, \"order\")\n @scope.usStatusList = _.sortBy(project.us_statuses, \"order\")\n @scope.taskStatusList = _.sortBy(project.task_statuses, \"order\")\n @scope.prioritiesList = _.sortBy(project.priorities, \"order\")\n @scope.severitiesList = _.sortBy(project.severities, \"order\")\n @scope.issueTypesList = _.sortBy(project.issue_types, \"order\")\n @scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\")\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise\n\n openDeleteLightbox: ->\n @rootscope.$broadcast(\"deletelightbox:new\", @scope.project)\n\nmodule.controller(\"ProjectProfileController\", ProjectProfileController)\n\n\n#############################################################################\n## Project Profile Directive\n#############################################################################\n\nProjectProfileDirective = ($repo, $confirm, $loading, $navurls, $location, projectService, currentUserService) ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.save($scope.project)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n newUrl = $navurls.resolve(\"project-admin-project-profile-details\", {\n project: $scope.project.slug\n })\n $location.path(newUrl)\n\n $ctrl.loadInitialData()\n\n projectService.fetchProject()\n currentUserService.loadProjects()\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgProjectProfile\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgNavUrls\", \"$tgLocation\",\n \"tgProjectService\", \"tgCurrentUserService\", ProjectProfileDirective])\n\n\n#############################################################################\n## Project Default Values Directive\n#############################################################################\n\nProjectDefaultValuesDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.save($scope.project)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgProjectDefaultValues\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\",\n ProjectDefaultValuesDirective])\n\n#############################################################################\n## Project Modules Directive\n#############################################################################\n\nProjectModulesDirective = ($repo, $confirm, $loading, projectService) ->\n link = ($scope, $el, $attrs) ->\n submit = =>\n form = $el.find(\"form\").checksley()\n return if not form.validate()\n\n target = angular.element(\".admin-functionalities .submit-button\")\n currentLoading = $loading()\n .target(target)\n .start()\n\n promise = $repo.save($scope.project)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"project:loaded\", $scope.project)\n\n projectService.fetchProject()\n\n promise.then null, (data) ->\n currentLoading.finish()\n $confirm.notify(\"error\", data._error_message)\n\n $el.on \"submit\", \"form\", (event) ->\n event.preventDefault()\n submit()\n\n $el.on \"click\", \".admin-functionalities a.button-green\", (event) ->\n event.preventDefault()\n submit()\n\n $scope.$watch \"isVideoconferenceActivated\", (isVideoconferenceActivated) ->\n if isVideoconferenceActivated\n $el.find(\".videoconference-attributes\").removeClass(\"hidden\")\n else\n $el.find(\".videoconference-attributes\").addClass(\"hidden\")\n $scope.project.videoconferences = null\n $scope.project.videoconferences_extra_data = \"\"\n\n $scope.$watch \"project\", (project) ->\n if project.videoconferences?\n $scope.isVideoconferenceActivated = true\n else\n $scope.isVideoconferenceActivated = false\n\n return {link:link}\n\nmodule.directive(\"tgProjectModules\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"tgProjectService\",\n ProjectModulesDirective])\n\n\n#############################################################################\n## Project Export Directive\n#############################################################################\n\nProjectExportDirective = ($window, $rs, $confirm, $translate) ->\n link = ($scope, $el, $attrs) ->\n buttonsEl = $el.find(\".admin-project-export-buttons\")\n showButtons = -> buttonsEl.removeClass(\"hidden\")\n hideButtons = -> buttonsEl.addClass(\"hidden\")\n\n resultEl = $el.find(\".admin-project-export-result\")\n showResult = -> resultEl.removeClass(\"hidden\")\n hideResult = -> resultEl.addClass(\"hidden\")\n\n spinnerEl = $el.find(\".spin\")\n showSpinner = -> spinnerEl.removeClass(\"hidden\")\n hideSpinner = -> spinnerEl.addClass(\"hidden\")\n\n resultTitleEl = $el.find(\".result-title\")\n\n\n loading_title = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_TITLE\")\n loading_msg = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_MESSAGE\")\n dump_ready_text = -> resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.DUMP_READY\"))\n asyn_message = -> resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE\"))\n syn_message = (url) -> resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.SYNC_MESSAGE\", {\n url: url}))\n\n setLoadingTitle = -> resultTitleEl.html(loading_title)\n setAsyncTitle = -> resultTitleEl.html(loading_msg)\n setSyncTitle = -> resultTitleEl.html(dump_ready_text)\n\n resultMessageEl = $el.find(\".result-message \")\n setLoadingMessage = -> resultMessageEl.html(loading_msg)\n setAsyncMessage = -> resultMessageEl.html(asyn_message)\n setSyncMessage = (url) -> resultMessageEl.html(syn_message(url))\n\n showLoadingMode = ->\n showSpinner()\n setLoadingTitle()\n setLoadingMessage()\n hideButtons()\n showResult()\n\n showExportResultAsyncMode = ->\n hideSpinner()\n setAsyncTitle()\n setAsyncMessage()\n\n showExportResultSyncMode = (url) ->\n hideSpinner()\n setSyncTitle()\n setSyncMessage(url)\n\n showErrorMode = ->\n hideSpinner()\n hideResult()\n showButtons()\n\n $el.on \"click\", \"a.button-export\", debounce 2000, (event) =>\n event.preventDefault()\n\n onSuccess = (result) =>\n if result.status == 202 # Async mode\n showExportResultAsyncMode()\n else #result.status == 200 # Sync mode\n dumpUrl = result.data.url\n showExportResultSyncMode(dumpUrl)\n $window.open(dumpUrl, \"_blank\")\n\n onError = (result) =>\n showErrorMode()\n\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR\")\n\n if result.status == 429 # TOO MANY REQUESTS\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\")\n else if result.data?._error_message\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\", {\n message: result.data._error_message})\n\n $confirm.notify(\"error\", errorMsg)\n\n showLoadingMode()\n $rs.projects.export($scope.projectId).then(onSuccess, onError)\n\n return {link:link}\n\nmodule.directive(\"tgProjectExport\", [\"$window\", \"$tgResources\", \"$tgConfirm\", \"$translate\",\n ProjectExportDirective])\n\n\n#############################################################################\n## CSV Export Controllers\n#############################################################################\n\nclass CsvExporterController extends taiga.Controller\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgUrls\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @urls, @confirm, @rs, @translate) ->\n @rootscope.$on(\"project:loaded\", @.setCsvUuid)\n @scope.$watch \"csvUuid\", (value) =>\n if value\n @scope.csvUrl = @urls.resolveAbsolute(\"#{@.type}-csv\", value)\n else\n @scope.csvUrl = \"\"\n\n setCsvUuid: =>\n @scope.csvUuid = @scope.project[\"#{@.type}_csv_uuid\"]\n\n _generateUuid: (response=null) =>\n promise = @rs.projects[\"regenerate_#{@.type}_csv_uuid\"](@scope.projectId)\n\n promise.then (data) =>\n @scope.csvUuid = data.data?.uuid\n\n promise.then null, =>\n @confirm.notify(\"error\")\n\n promise.finally ->\n response.finish() if response\n return promise\n\n regenerateUuid: ->\n if @scope.csvUuid\n title = @translate.instant(\"ADMIN.REPORTS.REGENERATE_TITLE\")\n subtitle = @translate.instant(\"ADMIN.REPORTS.REGENERATE_SUBTITLE\")\n\n @confirm.ask(title, subtitle).then @._generateUuid\n else\n @._generateUuid()\n\n\nclass CsvExporterUserstoriesController extends CsvExporterController\n type: \"userstories\"\n\n\nclass CsvExporterTasksController extends CsvExporterController\n type: \"tasks\"\n\n\nclass CsvExporterIssuesController extends CsvExporterController\n type: \"issues\"\n\n\nmodule.controller(\"CsvExporterUserstoriesController\", CsvExporterUserstoriesController)\nmodule.controller(\"CsvExporterTasksController\", CsvExporterTasksController)\nmodule.controller(\"CsvExporterIssuesController\", CsvExporterIssuesController)\n\n\n#############################################################################\n## CSV Directive\n#############################################################################\n\nCsvUsDirective = ($translate) ->\n link = ($scope) ->\n $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_US\"\n\n return {\n controller: \"CsvExporterUserstoriesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n }\n\nmodule.directive(\"tgCsvUs\", [\"$translate\", CsvUsDirective])\n\n\nCsvTaskDirective = ($translate) ->\n link = ($scope) ->\n $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_TASK\"\n\n return {\n controller: \"CsvExporterTasksController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n }\n\nmodule.directive(\"tgCsvTask\", [\"$translate\", CsvTaskDirective])\n\n\nCsvIssueDirective = ($translate) ->\n link = ($scope) ->\n $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_ISSUE\"\n\n return {\n controller: \"CsvExporterIssuesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n }\n\nmodule.directive(\"tgCsvIssue\", [\"$translate\", CsvIssueDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/project-profile.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntrim = @.taiga.trim\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaAdmin\")\n\n#############################################################################\n## Project values section Controller\n#############################################################################\n\nclass ProjectValuesSectionController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @appMetaService, @translate) ->\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then () =>\n sectionName = @translate.instant(@scope.sectionName)\n\n title = @translate.instant(\"ADMIN.PROJECT_VALUES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": @scope.project.name\n })\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise\n\n\nmodule.controller(\"ProjectValuesSectionController\", ProjectValuesSectionController)\n\n#############################################################################\n## Project values Controller\n#############################################################################\n\nclass ProjectValuesController extends taiga.Controller\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs) ->\n @scope.$on(\"admin:project-values:move\", @.moveValue)\n @rootscope.$on(\"project:loaded\", @.loadValues)\n\n loadValues: =>\n return @rs[@scope.resource].listValues(@scope.projectId, @scope.type).then (values) =>\n @scope.values = values\n @scope.maxValueOrder = _.max(values, \"order\").order\n return values\n\n moveValue: (ctx, itemValue, itemIndex) =>\n values = @scope.values\n r = values.indexOf(itemValue)\n values.splice(r, 1)\n values.splice(itemIndex, 0, itemValue)\n _.each values, (value, index) ->\n value.order = index\n\n @repo.saveAll(values)\n\nmodule.controller(\"ProjectValuesController\", ProjectValuesController)\n\n\n#############################################################################\n## Project values directive\n#############################################################################\n\nProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope) ->\n ## Drag & Drop Link\n\n linkDragAndDrop = ($scope, $el, $attrs) ->\n oldParentScope = null\n newParentScope = null\n itemEl = null\n tdom = $el.find(\".sortable\")\n\n tdom.sortable({\n handle: \".row.table-main.visualization\",\n dropOnEmpty: true\n connectWith: \".project-values-body\"\n revert: 400\n axis: \"y\"\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n itemEl = ui.item\n itemValue = itemEl.scope().value\n itemIndex = itemEl.index()\n $scope.$broadcast(\"admin:project-values:move\", itemValue, itemIndex)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n ## Value Link\n\n linkValue = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n valueType = $attrs.type\n objName = $attrs.objname\n\n initializeNewValue = ->\n $scope.newValue = {\n \"name\": \"\"\n \"is_closed\": false\n \"is_archived\": false\n }\n\n initializeTextTranslations = ->\n $scope.addNewElementText = $translate.instant(\"ADMIN.PROJECT_VALUES_#{objName.toUpperCase()}.ACTION_ADD\")\n\n initializeNewValue()\n initializeTextTranslations()\n\n $rootscope.$on \"$translateChangeEnd\", ->\n $scope.$evalAsync(initializeTextTranslations)\n\n goToBottomList = (focus = false) =>\n table = $el.find(\".table-main\")\n\n $(document.body).scrollTop(table.offset().top + table.height())\n\n if focus\n $el.find(\".new-value input:visible\").first().focus()\n\n saveValue = (target) ->\n formEl = target.parents(\"form\")\n form = formEl.checksley()\n return if not form.validate()\n\n value = formEl.scope().value\n promise = $repo.save(value)\n promise.then =>\n row = target.parents(\".row.table-main\")\n row.addClass(\"hidden\")\n row.siblings(\".visualization\").removeClass('hidden')\n\n promise.then null, (data) ->\n form.setErrors(data)\n\n saveNewValue = (target) ->\n formEl = target.parents(\"form\")\n form = formEl.checksley()\n return if not form.validate()\n\n $scope.newValue.project = $scope.project.id\n\n $scope.newValue.order = if $scope.maxValueOrder then $scope.maxValueOrder + 1 else 1\n\n promise = $repo.create(valueType, $scope.newValue)\n promise.then (data) =>\n target.addClass(\"hidden\")\n\n $scope.values.push(data)\n $scope.maxValueOrder = data.order\n initializeNewValue()\n\n promise.then null, (data) ->\n form.setErrors(data)\n\n cancel = (target) ->\n row = target.parents(\".row.table-main\")\n formEl = target.parents(\"form\")\n value = formEl.scope().value\n $scope.$apply ->\n row.addClass(\"hidden\")\n value.revert()\n row.siblings(\".visualization\").removeClass('hidden')\n\n $el.on \"click\", \".show-add-new\", (event) ->\n event.preventDefault()\n $el.find(\".new-value\").removeClass('hidden')\n\n goToBottomList(true)\n\n $el.on \"click\", \".add-new\", debounce 2000, (event) ->\n event.preventDefault()\n target = $el.find(\".new-value\")\n saveNewValue(target)\n\n $el.on \"click\", \".delete-new\", (event) ->\n event.preventDefault()\n $el.find(\".new-value\").addClass(\"hidden\")\n initializeNewValue()\n\n $el.on \"click\", \".edit-value\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n row = target.parents(\".row.table-main\")\n row.addClass(\"hidden\")\n\n editionRow = row.siblings(\".edition\")\n editionRow.removeClass('hidden')\n editionRow.find('input:visible').first().focus().select()\n\n $el.on \"keyup\", \".edition input\", (event) ->\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n saveValue(target)\n else if event.keyCode == 27\n target = angular.element(event.currentTarget)\n cancel(target)\n\n $el.on \"keyup\", \".new-value input\", (event) ->\n if event.keyCode == 13\n target = $el.find(\".new-value\")\n saveNewValue(target)\n else if event.keyCode == 27\n $el.find(\".new-value\").addClass(\"hidden\")\n initializeNewValue()\n\n $el.on \"click\", \".save\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n saveValue(target)\n\n $el.on \"click\", \".cancel\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n cancel(target)\n\n $el.on \"click\", \".delete-value\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.parents(\"form\")\n value = formEl.scope().value\n\n choices = {}\n _.each $scope.values, (option) ->\n if value.id != option.id\n choices[option.id] = option.name\n\n subtitle = value.name\n\n if _.keys(choices).length == 0\n return $confirm.error($translate.instant(\"ADMIN.PROJECT_VALUES.ERROR_DELETE_ALL\"))\n\n title = $translate.instant(\"ADMIN.COMMON.TITLE_ACTION_DELETE_VALUE\")\n text = $translate.instant(\"ADMIN.PROJECT_VALUES.REPLACEMENT\")\n\n $confirm.askChoice(title, subtitle, choices, text).then (response) ->\n onSucces = ->\n $ctrl.loadValues().finally ->\n response.finish()\n onError = ->\n $confirm.notify(\"error\")\n $repo.remove(value, {\"moveTo\": response.selected}).then(onSucces, onError)\n\n link = ($scope, $el, $attrs) ->\n linkDragAndDrop($scope, $el, $attrs)\n linkValue($scope, $el, $attrs)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgProjectValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", ProjectValuesDirective])\n\n\n#############################################################################\n## Color selection directive\n#############################################################################\n\nColorSelectionDirective = () ->\n ## Color selection Link\n\n link = ($scope, $el, $attrs, $model) ->\n $ctrl = $el.controller()\n\n $scope.$watch $attrs.ngModel, (element) ->\n $scope.color = element.color\n\n $el.on \"click\", \".current-color\", (event) ->\n # Showing the color selector\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n $el.find(\".select-color\").hide()\n target.siblings(\".select-color\").show()\n # Hide when click outside\n body = angular.element(\"body\")\n body.on \"click\", (event) =>\n if angular.element(event.target).parent(\".select-color\").length == 0\n $el.find(\".select-color\").hide()\n body.unbind(\"click\")\n\n $el.on \"click\", \".select-color .color\", (event) ->\n # Selecting one color on color selector\n event.preventDefault()\n target = angular.element(event.currentTarget)\n $scope.$apply ->\n $model.$modelValue.color = target.data(\"color\")\n $el.find(\".select-color\").hide()\n\n $el.on \"click\", \".select-color .selected-color\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $model.$modelValue.color = $scope.color\n $el.find(\".select-color\").hide()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n require:\"ngModel\"\n }\n\nmodule.directive(\"tgColorSelection\", ColorSelectionDirective)\n\n\n#############################################################################\n## Custom Attributes Controller\n#############################################################################\n\n# Custom attributes types (see taiga-back/taiga/projects/custom_attributes/choices.py)\nTEXT_TYPE = \"text\"\nMULTILINE_TYPE = \"multiline\"\nDATE_TYPE = \"date\"\n\n\nTYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n },\n {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n },\n {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }\n]\n\nclass ProjectCustomAttributesController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appMetaService,\n @translate) ->\n @scope.TYPE_CHOICES = TYPE_CHOICES\n\n @scope.project = {}\n\n @rootscope.$on \"project:loaded\", =>\n @.loadCustomAttributes()\n\n sectionName = @translate.instant(@scope.sectionName)\n title = @translate.instant(\"ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": @scope.project.name\n })\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n #########################\n # Custom Attribute\n #########################\n\n loadCustomAttributes: =>\n return @rs.customAttributes[@scope.type].list(@scope.projectId).then (customAttributes) =>\n @scope.customAttributes = customAttributes\n @scope.maxOrder = _.max(customAttributes, \"order\").order\n return customAttributes\n\n createCustomAttribute: (attrValues) =>\n return @repo.create(\"custom-attributes/#{@scope.type}\", attrValues)\n\n saveCustomAttribute: (attrModel) =>\n return @repo.save(attrModel)\n\n deleteCustomAttribute: (attrModel) =>\n return @repo.remove(attrModel)\n\n moveCustomAttributes: (attrModel, newIndex) =>\n customAttributes = @scope.customAttributes\n r = customAttributes.indexOf(attrModel)\n customAttributes.splice(r, 1)\n customAttributes.splice(newIndex, 0, attrModel)\n\n _.each customAttributes, (val, idx) ->\n val.order = idx\n\n @repo.saveAll(customAttributes)\n\n\nmodule.controller(\"ProjectCustomAttributesController\", ProjectCustomAttributesController)\n\n\n#############################################################################\n## Custom Attributes Directive\n#############################################################################\n\nProjectCustomAttributesDirective = ($log, $confirm, animationFrame, $translate) ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n ##################################\n # Drag & Drop\n ##################################\n sortableEl = $el.find(\".js-sortable\")\n\n sortableEl.sortable({\n handle: \".js-view-custom-field\",\n dropOnEmpty: true\n revert: 400\n axis: \"y\"\n })\n\n sortableEl.on \"sortstop\", (event, ui) ->\n itemEl = ui.item\n itemAttr = itemEl.scope().attr\n itemIndex = itemEl.index()\n $ctrl.moveCustomAttributes(itemAttr, itemIndex)\n\n ##################################\n # New custom attribute\n ##################################\n\n showCreateForm = ->\n $el.find(\".js-new-custom-field\").removeClass(\"hidden\")\n $el.find(\".js-new-custom-field input:visible\").first().focus()\n\n hideCreateForm = ->\n $el.find(\".js-new-custom-field\").addClass(\"hidden\")\n\n showAddButton = ->\n $el.find(\".js-add-custom-field-button\").removeClass(\"hidden\")\n\n hideAddButton = ->\n $el.find(\".js-add-custom-field-button\").addClass(\"hidden\")\n\n showCancelButton = ->\n $el.find(\".js-cancel-new-custom-field-button\").removeClass(\"hidden\")\n\n hideCancelButton = ->\n $el.find(\".js-cancel-new-custom-field-button\").addClass(\"hidden\")\n\n resetNewAttr = ->\n $scope.newAttr = {}\n\n create = (formEl) ->\n form = formEl.checksley()\n return if not form.validate()\n\n onSucces = =>\n $ctrl.loadCustomAttributes()\n hideCreateForm()\n resetNewAttr()\n $confirm.notify(\"success\")\n\n onError = (data) =>\n form.setErrors(data)\n\n attr = $scope.newAttr\n attr.project = $scope.projectId\n attr.order = if $scope.maxOrder then $scope.maxOrder + 1 else 1\n\n $ctrl.createCustomAttribute(attr).then(onSucces, onError)\n\n cancelCreate = ->\n hideCreateForm()\n resetNewAttr()\n\n $scope.$watch \"customAttributes\", (customAttributes) ->\n return if not customAttributes\n\n if customAttributes.length == 0\n hideCancelButton()\n hideAddButton()\n showCreateForm()\n else\n hideCreateForm()\n showAddButton()\n showCancelButton()\n\n $el.on \"click\", \".js-add-custom-field-button\", (event) ->\n event.preventDefault()\n\n showCreateForm()\n\n $el.on \"click\", \".js-create-custom-field-button\", debounce 2000, (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n create(formEl)\n\n $el.on \"click\", \".js-cancel-new-custom-field-button\", (event) ->\n event.preventDefault()\n\n cancelCreate()\n\n $el.on \"keyup\", \".js-new-custom-field input\", (event) ->\n if event.keyCode == 13 # Enter\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n create(formEl)\n else if event.keyCode == 27 # Esc\n cancelCreate()\n\n ##################################\n # Edit custom attribute\n ##################################\n\n showEditForm = (formEl) ->\n formEl.find(\".js-view-custom-field\").addClass(\"hidden\")\n formEl.find(\".js-edit-custom-field\").removeClass(\"hidden\")\n formEl.find(\".js-edit-custom-field input:visible\").first().focus().select()\n\n hideEditForm = (formEl) ->\n formEl.find(\".js-edit-custom-field\").addClass(\"hidden\")\n formEl.find(\".js-view-custom-field\").removeClass(\"hidden\")\n\n revertChangesInCustomAttribute = (formEl) ->\n $scope.$apply ->\n formEl.scope().attr.revert()\n\n update = (formEl) ->\n form = formEl.checksley()\n return if not form.validate()\n\n onSucces = =>\n $ctrl.loadCustomAttributes()\n hideEditForm(formEl)\n $confirm.notify(\"success\")\n\n onError = (data) =>\n form.setErrors(data)\n\n attr = formEl.scope().attr\n $ctrl.saveCustomAttribute(attr).then(onSucces, onError)\n\n cancelUpdate = (formEl) ->\n hideEditForm(formEl)\n revertChangesInCustomAttribute(formEl)\n\n $el.on \"click\", \".js-edit-custom-field-button\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n showEditForm(formEl)\n\n $el.on \"click\", \".js-update-custom-field-button\", debounce 2000, (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n update(formEl)\n\n $el.on \"click\", \".js-cancel-edit-custom-field-button\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n cancelUpdate(formEl)\n\n $el.on \"keyup\", \".js-edit-custom-field input\", (event) ->\n if event.keyCode == 13 # Enter\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n update(formEl)\n else if event.keyCode == 27 # Esc\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n cancelUpdate(formEl)\n\n ##################################\n # Delete custom attribute\n ##################################\n\n deleteCustomAttribute = (formEl) ->\n attr = formEl.scope().attr\n message = attr.name\n\n title = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.DELETE\")\n text = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.CONFIRM_DELETE\")\n\n $confirm.ask(title, text, message).then (response) ->\n onSucces = ->\n $ctrl.loadCustomAttributes().finally -> response.finish()\n\n onError = ->\n $confirm.notify(\"error\", null, \"We have not been able to delete '#{message}'.\")\n\n $ctrl.deleteCustomAttribute(attr).then(onSucces, onError)\n\n $el.on \"click\", \".js-delete-custom-field-button\", debounce 2000, (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n deleteCustomAttribute(formEl)\n\n return {link: link}\n\nmodule.directive(\"tgProjectCustomAttributes\", [\"$log\", \"$tgConfirm\", \"animationFrame\", \"$translate\",\n ProjectCustomAttributesDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/memberships.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Project Roles Controller\n#############################################################################\n\nclass RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = \"ADMIN.MENU.PERMISSIONS\"\n @scope.project = {}\n @scope.anyComputableRole = true\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.ROLES.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n\n @scope.$emit('project:loaded', project)\n @scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable))\n\n return project\n\n loadRoles: ->\n return @rs.roles.list(@scope.projectId).then (roles) =>\n roles = roles.map (role) ->\n role.external_user = false\n\n return role\n\n public_permission = {\n \"name\": @translate.instant(\"ADMIN.ROLES.EXTERNAL_USER\"),\n \"permissions\": @scope.project.public_permissions,\n \"external_user\": true\n }\n\n roles.push(public_permission)\n\n @scope.roles = roles\n @scope.role = @scope.roles[0]\n return roles\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadRoles())\n return promise\n\n setRole: (role) ->\n @scope.role = role\n @scope.$broadcast(\"role:changed\", @scope.role)\n\n delete: ->\n choices = {}\n for role in @scope.roles\n if role.id != @scope.role.id\n choices[role.id] = role.name\n\n if _.keys(choices).length == 0\n return @confirm.error(@translate.instant(\"ADMIN.ROLES.ERROR_DELETE_ALL\"))\n\n title = @translate.instant(\"ADMIN.ROLES.TITLE_DELETE_ROLE\")\n subtitle = @scope.role.name\n replacement = @translate.instant(\"ADMIN.ROLES.REPLACEMENT_ROLE\")\n warning = @translate.instant(\"ADMIN.ROLES.WARNING_DELETE_ROLE\")\n return @confirm.askChoice(title, subtitle, choices, replacement, warning).then (response) =>\n onSuccess = =>\n @.loadProject()\n @.loadRoles().finally =>\n response.finish()\n onError = =>\n @confirm.notify('error')\n\n return @repo.remove(@scope.role, {moveTo: response.selected}).then onSuccess, onError\n\n _enableComputable: =>\n onSuccess = =>\n @confirm.notify(\"success\")\n @.loadProject()\n\n onError = =>\n @confirm.notify(\"error\")\n @scope.role.revert()\n\n @repo.save(@scope.role).then onSuccess, onError\n\n _disableComputable: =>\n askOnSuccess = (response) =>\n onSuccess = =>\n response.finish()\n @confirm.notify(\"success\")\n @.loadProject()\n onError = =>\n response.finish()\n @confirm.notify(\"error\")\n @scope.role.revert()\n @repo.save(@scope.role).then onSuccess, onError\n\n askOnError = (response) =>\n @scope.role.revert()\n\n title = @translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_TITLE\")\n subtitle = @translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_SUBTITLE\", {\n roleName: @scope.role.name\n })\n message = @translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_MESSAGE\")\n return @confirm.ask(title, subtitle, message).then askOnSuccess, askOnError\n\n toggleComputable: debounce 2000, ->\n if not @scope.role.computable\n @._disableComputable()\n else\n @._enableComputable()\n\nmodule.controller(\"RolesController\", RolesController)\n\n\nEditRoleDirective = ($repo, $confirm) ->\n link = ($scope, $el, $attrs) ->\n toggleView = ->\n $el.find('.total').toggle()\n $el.find('.edit-role').toggle()\n\n submit = () ->\n $scope.role.name = $el.find(\"input\").val()\n\n promise = $repo.save($scope.role)\n\n promise.then ->\n $confirm.notify(\"success\")\n\n promise.then null, (data) ->\n $confirm.notify(\"error\")\n\n toggleView()\n\n $el.on \"click\", \"a.icon-edit\", ->\n toggleView()\n $el.find(\"input\").focus()\n $el.find(\"input\").val($scope.role.name)\n\n $el.on \"click\", \"a.save\", submit\n\n $el.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13 # Enter key\n submit()\n else if event.keyCode == 27 # ESC key\n toggleView()\n\n $scope.$on \"role:changed\", ->\n if $el.find('.edit-role').is(\":visible\")\n toggleView()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgEditRole\", [\"$tgRepo\", \"$tgConfirm\", EditRoleDirective])\n\nRolesDirective = ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgRoles\", RolesDirective)\n\nNewRoleDirective = ($tgrepo, $confirm) ->\n DEFAULT_PERMISSIONS = [\"view_project\", \"view_milestones\", \"view_us\", \"view_tasks\", \"view_issues\"]\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $el.on \"click\", \"a.add-button\", (event) ->\n event.preventDefault()\n $el.find(\".new\").removeClass(\"hidden\")\n $el.find(\".new\").focus()\n $el.find(\".add-button\").hide()\n\n $el.on \"keyup\", \".new\", (event) ->\n event.preventDefault()\n if event.keyCode == 13 # Enter key\n target = angular.element(event.currentTarget)\n newRole = {\n project: $scope.projectId\n name: target.val()\n permissions: DEFAULT_PERMISSIONS\n order: _.max($scope.roles, (r) -> r.order).order + 1\n computable: false\n }\n\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new\").val('')\n\n onSuccess = (role) ->\n insertPosition = $scope.roles.length - 1\n $scope.roles.splice(insertPosition, 0, role)\n $ctrl.setRole(role)\n $el.find(\".add-button\").show()\n $ctrl.loadProject()\n\n onError = ->\n $confirm.notify(\"error\")\n\n $tgrepo.create(\"roles\", newRole).then(onSuccess, onError)\n\n else if event.keyCode == 27 # ESC key\n target = angular.element(event.currentTarget)\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new\").val('')\n $el.find(\".add-button\").show()\n\n return {link:link}\n\nmodule.directive(\"tgNewRole\", [\"$tgRepo\", \"$tgConfirm\", NewRoleDirective])\n\n\n# Use category-config.scss styles\nRolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) ->\n resumeTemplate = _.template(\"\"\"\n
\">
\n
\n
<%- category.activePermissions %>/<%- category.permissions.length %>
\n <% _.each(category.permissions, function(permission) { %>\n
active<% } %>\"\n title=\"{{ '<%- permission.name %>' | translate }}\">
\n <% }) %>\n
\n
\n \"\"\")\n\n categoryTemplate = _.template(\"\"\"\n
\">\n
\n
\n
\n
\n <% _.each(category.permissions, function(permission) { %>\n
\">\n \">\n
\n disabled=\"disabled\" <% } %>\n <% if(permission.active) { %> checked=\"checked\" <% } %>/>\n
\n \n \n
\n
\n <% }) %>\n
\n
\n
\n \"\"\")\n\n baseTemplate = _.template(\"\"\"\n
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n generateCategoriesFromRole = (role) ->\n setActivePermissions = (permissions) ->\n return _.map(permissions, (x) -> _.extend({}, x, {active: x[\"key\"] in role.permissions}))\n\n isPermissionEditable = (permission, role, project) ->\n if role.external_user &&\n !project.is_private &&\n permission.key.indexOf(\"view_\") == 0\n return false\n else\n return true\n\n setActivePermissionsPerCategory = (category) ->\n return _.map(category, (cat) ->\n cat.permissions = cat.permissions.map (permission) ->\n permission.editable = isPermissionEditable(permission, role, $scope.project)\n\n return permission\n\n _.extend({}, cat, {\n activePermissions: _.filter(cat[\"permissions\"], \"active\").length\n })\n )\n\n categories = []\n\n milestonePermissions = [\n { key: \"view_milestones\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS\"}\n { key: \"add_milestone\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS\"}\n { key: \"modify_milestone\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS\"}\n { key: \"delete_milestone\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME\",\n permissions: setActivePermissions(milestonePermissions)\n })\n\n userStoryPermissions = [\n { key: \"view_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES\"}\n { key: \"add_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES\"}\n { key: \"modify_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES\"}\n { key: \"delete_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME\",\n permissions: setActivePermissions(userStoryPermissions)\n })\n\n taskPermissions = [\n { key: \"view_tasks\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS\"}\n { key: \"add_task\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS\"}\n { key: \"modify_task\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS\"}\n { key: \"delete_task\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.NAME\" ,\n permissions: setActivePermissions(taskPermissions)\n })\n\n issuePermissions = [\n { key: \"view_issues\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES\"}\n { key: \"add_issue\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES\"}\n { key: \"modify_issue\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES\"}\n { key: \"delete_issue\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME\",\n permissions: setActivePermissions(issuePermissions)\n })\n\n wikiPermissions = [\n { key: \"view_wiki_pages\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES\"}\n { key: \"add_wiki_page\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES\"}\n { key: \"modify_wiki_page\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES\"}\n { key: \"delete_wiki_page\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES\"}\n { key: \"view_wiki_links\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS\"}\n { key: \"add_wiki_link\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS\"}\n { key: \"delete_wiki_link\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.NAME\",\n permissions: setActivePermissions(wikiPermissions)\n })\n\n return setActivePermissionsPerCategory(categories)\n\n renderResume = (element, category) ->\n element.find(\".resume\").html($compile(resumeTemplate({category: category}))($scope))\n\n renderCategory = (category, index) ->\n html = categoryTemplate({category: category, index: index})\n html = angular.element(html)\n renderResume(html, category)\n return $compile(html)($scope)\n\n renderPermissions = () ->\n $el.off()\n html = baseTemplate()\n _.each generateCategoriesFromRole($scope.role), (category, index) ->\n html = angular.element(html).append(renderCategory(category, index))\n\n $el.html(html)\n $el.on \"click\", \".resume\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.next().toggleClass(\"open\")\n\n $el.on \"change\", \".category-item input\", (event) ->\n getActivePermissions = ->\n activePermissions = _.filter($el.find(\".category-item input\"), (t) ->\n angular.element(t).is(\":checked\")\n )\n activePermissions = _.sortBy(_.map(activePermissions, (t) ->\n permission = angular.element(t).parents(\".category-item\").data(\"id\")\n ))\n\n if activePermissions.length\n activePermissions.push(\"view_project\")\n\n return activePermissions\n\n target = angular.element(event.currentTarget)\n\n $scope.role.permissions = getActivePermissions()\n\n onSuccess = () ->\n categories = generateCategoriesFromRole($scope.role)\n categoryId = target.parents(\".category-config\").data(\"id\")\n renderResume(target.parents(\".category-config\"), categories[categoryId])\n $rootscope.$broadcast(\"projects:reload\")\n $confirm.notify(\"success\")\n $ctrl.loadProject()\n\n onError = ->\n $confirm.notify(\"error\")\n target.prop \"checked\", !target.prop(\"checked\")\n $scope.role.permissions = getActivePermissions()\n\n if $scope.role.external_user\n $scope.project.public_permissions = $scope.role.permissions\n $scope.project.anon_permissions = $scope.role.permissions.filter (permission) ->\n return permission.indexOf(\"view_\") == 0\n\n $repo.save($scope.project).then onSuccess, onError\n else\n $repo.save($scope.role).then onSuccess, onError\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $scope.$on \"role:changed\", ->\n renderPermissions()\n\n bindOnce($scope, $attrs.ngModel, renderPermissions)\n\n return {link:link}\n\nmodule.directive(\"tgRolePermissions\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\",\n RolePermissionsDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/third-parties.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\nbindMethods = @.taiga.bindMethods\ndebounce = @.taiga.debounce\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Webhooks\n#############################################################################\n\nclass WebhooksController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @location, @navUrls, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = \"ADMIN.WEBHOOKS.SECTION_NAME\"\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.WEBHOOKS.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"webhooks:reload\", @.loadWebhooks\n\n loadWebhooks: ->\n return @rs.webhooks.list(@scope.projectId).then (webhooks) =>\n @scope.webhooks = webhooks\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then =>\n @.loadWebhooks()\n\n return promise\n\nmodule.controller(\"WebhooksController\", WebhooksController)\n\n\n#############################################################################\n## Webhook Directive\n#############################################################################\n\nWebhookDirective = ($rs, $repo, $confirm, $loading, $translate) ->\n link = ($scope, $el, $attrs) ->\n webhook = $scope.$eval($attrs.tgWebhook)\n\n updateLogs = () ->\n prettyDate = $translate.instant(\"ADMIN.WEBHOOKS.DATE\")\n\n $rs.webhooklogs.list(webhook.id).then (webhooklogs) =>\n for log in webhooklogs\n log.validStatus = 200 <= log.status < 300\n log.prettySentHeaders = _.map(_.pairs(log.request_headers), ([header, value]) -> \"#{header}: #{value}\").join(\"\\n\")\n log.prettySentData = JSON.stringify(log.request_data)\n log.prettyDate = moment(log.created).format(prettyDate)\n\n webhook.logs_counter = webhooklogs.length\n webhook.logs = webhooklogs\n updateShowHideHistoryText()\n\n updateShowHideHistoryText = () ->\n textElement = $el.find(\".toggle-history\")\n historyElement = textElement.parents(\".single-webhook-wrapper\").find(\".webhooks-history\")\n\n if historyElement.hasClass(\"open\")\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY\")\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY_TITLE\")\n else\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY\")\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY_TITLE\")\n\n textElement.text(text)\n textElement.prop(\"title\", title)\n\n showVisualizationMode = () ->\n $el.find(\".edition-mode\").addClass(\"hidden\")\n $el.find(\".visualization-mode\").removeClass(\"hidden\")\n\n showEditMode = () ->\n $el.find(\".visualization-mode\").addClass(\"hidden\")\n $el.find(\".edition-mode\").removeClass(\"hidden\")\n\n openHistory = () ->\n $el.find(\".webhooks-history\").addClass(\"open\")\n\n cancel = () ->\n showVisualizationMode()\n $scope.$apply ->\n webhook.revert()\n\n save = debounce 2000, (target) ->\n form = target.parents(\"form\").checksley()\n return if not form.validate()\n promise = $repo.save(webhook)\n promise.then =>\n showVisualizationMode()\n\n promise.then null, (data) ->\n $confirm.notify(\"error\")\n form.setErrors(data)\n\n $el.on \"click\", \".test-webhook\", () ->\n openHistory()\n $rs.webhooks.test(webhook.id).then =>\n updateLogs()\n\n $el.on \"click\", \".edit-webhook\", () ->\n showEditMode()\n\n $el.on \"click\", \".cancel-existing\", () ->\n cancel()\n\n $el.on \"click\", \".edit-existing\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n save(target)\n\n $el.on \"keyup\", \".edition-mode input\", (event) ->\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n save(target)\n else if event.keyCode == 27\n target = angular.element(event.currentTarget)\n cancel(target)\n\n $el.on \"click\", \".delete-webhook\", () ->\n title = $translate.instant(\"ADMIN.WEBHOOKS.DELETE\")\n message = $translate.instant(\"ADMIN.WEBHOOKS.WEBHOOK_NAME\", {name: webhook.name})\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n onSucces = ->\n askResponse.finish()\n $scope.$emit(\"webhooks:reload\")\n\n onError = ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $repo.remove(webhook).then(onSucces, onError)\n\n $el.on \"click\", \".toggle-history\", (event) ->\n target = angular.element(event.currentTarget)\n if not webhook.logs? or webhook.logs.length == 0\n updateLogs().then ->\n #Waiting for ng-repeat to finish\n timeout 0, ->\n $el.find(\".webhooks-history\").toggleClass(\"open\")\n updateShowHideHistoryText()\n\n else\n $el.find(\".webhooks-history\").toggleClass(\"open\")\n $scope.$apply () ->\n updateShowHideHistoryText()\n\n\n $el.on \"click\", \".history-single\", (event) ->\n target = angular.element(event.currentTarget)\n target.toggleClass(\"history-single-open\")\n target.siblings(\".history-single-response\").toggleClass(\"open\")\n\n $el.on \"click\", \".resend-request\", (event) ->\n target = angular.element(event.currentTarget)\n log = target.data(\"log\")\n $rs.webhooklogs.resend(log).then () =>\n updateLogs()\n\n return {link:link}\n\nmodule.directive(\"tgWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$translate\",\n WebhookDirective])\n\n\n#############################################################################\n## New webhook Directive\n#############################################################################\n\nNewWebhookDirective = ($rs, $repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n webhook = $scope.$eval($attrs.tgWebhook)\n formDOMNode = $el.find(\".new-webhook-form\")\n addWebhookDOMNode = $el.find(\".add-webhook\")\n initializeNewValue = ->\n $scope.newValue = {\n \"name\": \"\"\n \"url\": \"\"\n \"key\": \"\"\n }\n\n initializeNewValue()\n\n $scope.$watch \"webhooks\", (webhooks) ->\n if webhooks?\n if webhooks.length == 0\n formDOMNode.removeClass(\"hidden\")\n addWebhookDOMNode.addClass(\"hidden\")\n formDOMNode.find(\"input\")[0].focus()\n else\n formDOMNode.addClass(\"hidden\")\n addWebhookDOMNode.removeClass(\"hidden\")\n\n save = debounce 2000, () ->\n form = formDOMNode.checksley()\n return if not form.validate()\n\n $scope.newValue.project = $scope.project.id\n promise = $repo.create(\"webhooks\", $scope.newValue)\n promise.then =>\n $scope.$emit(\"webhooks:reload\")\n initializeNewValue()\n\n promise.then null, (data) ->\n $confirm.notify(\"error\")\n form.setErrors(data)\n\n formDOMNode.on \"click\", \".add-new\", (event) ->\n event.preventDefault()\n save()\n\n formDOMNode.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13\n save()\n\n formDOMNode.on \"click\", \".cancel-new\", (event) ->\n $scope.$apply ->\n initializeNewValue()\n\n addWebhookDOMNode.on \"click\", (event) ->\n formDOMNode.removeClass(\"hidden\")\n formDOMNode.find(\"input\")[0].focus()\n\n return {link:link}\n\nmodule.directive(\"tgNewWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", NewWebhookDirective])\n\n\n#############################################################################\n## Github Controller\n#############################################################################\n\nclass GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"ADMIN.GITHUB.SECTION_NAME\")\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.GITHUB.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadModules: ->\n return @rs.modules.list(@scope.projectId, \"github\").then (github) =>\n @scope.github = github\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadModules())\n return promise\n\nmodule.controller(\"GithubController\", GithubController)\n\n\n#############################################################################\n## Gitlab Controller\n#############################################################################\n\nclass GitlabController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"ADMIN.GITLAB.SECTION_NAME\")\n @scope.project = {}\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.GITLAB.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"project:modules:reload\", =>\n @.loadModules()\n\n loadModules: ->\n return @rs.modules.list(@scope.projectId, \"gitlab\").then (gitlab) =>\n @scope.gitlab = gitlab\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadModules())\n return promise\n\nmodule.controller(\"GitlabController\", GitlabController)\n\n\n#############################################################################\n## Bitbucket Controller\n#############################################################################\n\nclass BitbucketController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"ADMIN.BITBUCKET.SECTION_NAME\")\n @scope.project = {}\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.BITBUCKET.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"project:modules:reload\", =>\n @.loadModules()\n\n loadModules: ->\n return @rs.modules.list(@scope.projectId, \"bitbucket\").then (bitbucket) =>\n @scope.bitbucket = bitbucket\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadModules())\n return promise\n\nmodule.controller(\"BitbucketController\", BitbucketController)\n\n\nSelectInputText = ->\n link = ($scope, $el, $attrs) ->\n $el.on \"click\", \".select-input-content\", () ->\n $el.find(\"input\").select()\n $el.find(\".help-copy\").addClass(\"visible\")\n\n return {link:link}\n\nmodule.directive(\"tgSelectInputText\", SelectInputText)\n\n\n#############################################################################\n## GithubWebhooks Directive\n#############################################################################\n\nGithubWebhooksDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.saveAttribute($scope.github, \"github\")\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgGithubWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", GithubWebhooksDirective])\n\n\n#############################################################################\n## GitlabWebhooks Directive\n#############################################################################\n\nGitlabWebhooksDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.saveAttribute($scope.gitlab, \"gitlab\")\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"project:modules:reload\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgGitlabWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", GitlabWebhooksDirective])\n\n\n#############################################################################\n## BitbucketWebhooks Directive\n#############################################################################\n\nBitbucketWebhooksDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.saveAttribute($scope.bitbucket, \"bitbucket\")\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"project:modules:reload\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgBitbucketWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", BitbucketWebhooksDirective])\n\n\n#############################################################################\n## Valid Origin IP's Directive\n#############################################################################\nValidOriginIpsDirective = ->\n link = ($scope, $el, $attrs, $ngModel) ->\n $ngModel.$parsers.push (value) ->\n value = $.trim(value)\n if value == \"\"\n return []\n\n return value.split(\",\")\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgValidOriginIps\", ValidOriginIpsDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/attachments.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ntimeout = @.taiga.timeout\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaProject\")\n\nCreateProject = ($rootscope, $repo, $confirm, $location, $navurls, $rs, $projectUrl, $loading, lightboxService, $cacheFactory, $translate, currentUserService) ->\n link = ($scope, $el, attrs) ->\n $scope.data = {}\n $scope.templates = []\n currentLoading = null\n\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n\n onSuccessSubmit = (response) ->\n # remove all $http cache\n # This is necessary when a project is created with the same name\n # than another deleted in the same session\n $cacheFactory.get('$http').removeAll()\n\n currentLoading.finish()\n $rootscope.$broadcast(\"projects:reload\")\n\n $confirm.notify(\"success\", $translate.instant(\"COMMON.SAVE\"))\n\n $location.url($projectUrl.get(response))\n lightboxService.close($el)\n currentUserService.loadProjects()\n\n onErrorSubmit = (response) ->\n currentLoading.finish()\n form.setErrors(response)\n selectors = []\n for error_field in _.keys(response)\n selectors.push(\"[name=#{error_field}]\")\n $el.find(\".active\").removeClass(\"active\")\n error_step = $el.find(selectors.join(\",\")).first().parents(\".wizard-step\")\n error_step.addClass(\"active\")\n $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(error_step.data(\"step\"))\n\n submit = (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.create(\"projects\", $scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n openLightbox = ->\n $scope.data = {}\n\n if !$scope.templates.length\n $rs.projects.templates().then (result) =>\n $scope.templates = result\n $scope.data.creation_template = _.head(_.filter($scope.templates, (x) -> x.slug == \"scrum\")).id\n else\n $scope.data.creation_template = _.head(_.filter($scope.templates, (x) -> x.slug == \"scrum\")).id\n\n $el.find(\".active\").removeClass(\"active\")\n $el.find(\".create-step1\").addClass(\"active\")\n\n lightboxService.open($el)\n timeout 600, ->\n $el.find(\".progress-bar\").addClass('step1')\n\n $el.on \"click\", \".button-next\", (event) ->\n event.preventDefault()\n\n current = $el.find(\".active\")\n\n valid = true\n for field in form.fields\n if current.find(\"[name=#{field.element.attr('name')}]\").length\n valid = field.validate() != false and valid\n\n if not valid\n return\n\n next = current.next()\n current.toggleClass('active')\n next.toggleClass('active')\n step = next.data('step')\n $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(step)\n\n $el.on \"click\", \".button-prev\", (event) ->\n event.preventDefault()\n current = $el.find(\".active\")\n prev = current.prev()\n current.toggleClass('active')\n prev.toggleClass('active')\n step = prev.data('step')\n $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(step)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n openLightbox()\n\n directive = {\n link: link,\n templateUrl: \"project/wizard-create-project.html\"\n scope: {}\n }\n\n return directive\n\n\nmodule.directive(\"tgLbCreateProject\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\",\n \"$location\", \"$tgNavUrls\", \"$tgResources\", \"$projectUrl\", \"$tgLoading\",\n \"lightboxService\", \"$cacheFactory\", \"$translate\", \"tgCurrentUserService\", CreateProject])\n\n\n#############################################################################\n## Delete Project Lightbox Directive\n#############################################################################\n\nDeleteProjectDirective = ($repo, $rootscope, $auth, $location, $navUrls, $confirm, lightboxService, tgLoader, currentUserService) ->\n link = ($scope, $el, $attrs) ->\n projectToDelete = null\n $scope.$on \"deletelightbox:new\", (ctx, project)->\n lightboxService.open($el)\n projectToDelete = project\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n submit = ->\n tgLoader.start()\n lightboxService.close($el)\n\n promise = $repo.remove(projectToDelete)\n\n promise.then (data) ->\n tgLoader.pageLoaded()\n $rootscope.$broadcast(\"projects:reload\")\n $location.path($navUrls.resolve(\"home\"))\n $confirm.notify(\"success\")\n currentUserService.loadProjects()\n\n # FIXME: error handling?\n promise.then null, ->\n $confirm.notify(\"error\")\n lightboxService.close($el)\n\n $el.on \"click\", \".button-red\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n $el.on \"click\", \".button-green\", (event) ->\n event.preventDefault()\n submit()\n\n return {link:link}\n\nmodule.directive(\"tgLbDeleteProject\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\",\n \"$tgConfirm\", \"lightboxService\", \"tgLoader\", \"tgCurrentUserService\", DeleteProjectDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/bind.coffee\n###\n\nbindOnce = @.taiga.bindOnce\n\n# Escape Html bind once directive\nBindOnceBindDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoBind, (val) ->\n $el.text(val)\n\n return {link:link}\n\n# Html bind once directive\nBindOnceHtmlDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoHtml, (val) ->\n $el.html(val)\n\n return {link:link}\n\n# Object reference bind once helper.\nBindOnceRefDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoRef, (val) ->\n $el.html(\"##{val} \")\n return {link:link}\n\n# Object src bind once helper.\nBindOnceSrcDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoSrc, (val) ->\n $el.attr(\"src\", val)\n return {link:link}\n\n# Object href bind once helper.\nBindOnceHrefDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoHref, (val) ->\n $el.attr(\"href\", val)\n return {link:link}\n\n# Object alt bind once helper.\nBindOnceAltDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoAlt, (val) ->\n $el.attr(\"alt\", val)\n return {link:link}\n\n# Object title bind once helper.\nBindOnceTitleDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoTitle, (val) ->\n $el.attr(\"title\", val)\n return {link:link}\n\nBindTitleDirective = ->\n link = ($scope, $el, $attrs) ->\n $scope.$watch $attrs.tgTitleHtml, (val) ->\n $el.attr(\"title\", val) if val?\n\n return {link:link}\n\nBindHtmlDirective = ->\n link = ($scope, $el, $attrs) ->\n $scope.$watch $attrs.tgBindHtml, (val) ->\n $el.html(val) if val?\n\n return {link:link}\n\nmodule = angular.module(\"taigaBase\")\nmodule.directive(\"tgBoBind\", BindOnceBindDirective)\nmodule.directive(\"tgBoHtml\", BindOnceHtmlDirective)\nmodule.directive(\"tgBoRef\", BindOnceRefDirective)\nmodule.directive(\"tgBoSrc\", BindOnceSrcDirective)\nmodule.directive(\"tgBoHref\", BindOnceHrefDirective)\nmodule.directive(\"tgBoAlt\", BindOnceAltDirective)\nmodule.directive(\"tgBoTitle\", BindOnceTitleDirective)\nmodule.directive(\"tgBindTitle\", BindTitleDirective)\nmodule.directive(\"tgBindHtml\", BindHtmlDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/conf.coffee\n###\n\nclass ConfigurationService\n constructor: () ->\n @.config = window.taigaConfig\n\n get: (key, defaultValue=null) ->\n if _.has(@.config, key)\n return @.config[key]\n return defaultValue\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgConfig\", ConfigurationService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/contrib.coffee\n###\n\ntaigaContribPlugins = @.taigaContribPlugins = @.taigaContribPlugins or []\n\nclass ContribController extends taiga.Controller\n @.$inject = [\n \"$rootScope\",\n \"$scope\",\n \"$routeParams\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$tgConfirm\"\n ]\n\n constructor: (@rootScope, @scope, @params, @repo, @rs, @confirm) ->\n @scope.adminPlugins = _.where(@rootScope.contribPlugins, {\"type\": \"admin\"})\n @scope.currentPlugin = _.first(_.where(@scope.adminPlugins, {\"slug\": @params.plugin}))\n @scope.pluginTemplate = \"contrib/#{@scope.currentPlugin.slug}\"\n @scope.projectSlug = @params.pslug\n\n promise = @.loadInitialData()\n\n promise.then null, =>\n @confirm.notify(\"error\")\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.$broadcast('project:loaded', project)\n return project\n\n loadInitialData: ->\n return @.loadProject()\n\nmodule = angular.module(\"taigaBase\")\nmodule.controller(\"ContribController\", ContribController)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/filters.coffee\n###\n\n\ntaiga = @.taiga\n\nclass FiltersStorageService extends taiga.Service\n @.$inject = [\"$tgStorage\", \"$routeParams\"]\n\n constructor: (@storage, @params) ->\n\n generateHash: (components=[]) ->\n components = _.map(components, (x) -> JSON.stringify(x))\n return hex_sha1(components.join(\":\"))\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/http.coffee\n###\n\ntaiga = @.taiga\n\nclass HttpService extends taiga.Service\n @.$inject = [\"$http\", \"$q\", \"$tgStorage\", \"$rootScope\", \"$cacheFactory\", \"$translate\"]\n\n constructor: (@http, @q, @storage, @rootScope, @cacheFactory, @translate) ->\n super()\n\n @.cache = @cacheFactory(\"httpget\");\n headers: ->\n headers = {}\n\n # Authorization\n token = @storage.get('token')\n if token\n headers[\"Authorization\"] = \"Bearer #{token}\"\n\n # Accept-Language\n lang = @translate.preferredLanguage()\n if lang\n headers[\"Accept-Language\"] = lang\n\n return headers\n\n request: (options) ->\n options.headers = _.merge({}, options.headers or {}, @.headers())\n if _.isPlainObject(options.data)\n options.data = JSON.stringify(options.data)\n\n return @http(options)\n\n get: (url, params, options) ->\n options = _.merge({method: \"GET\", url: url}, options)\n options.params = params if params\n\n # prevent duplicated http request\n options.cache = @.cache\n\n return @.request(options).finally (data) =>\n @.cache.removeAll()\n\n post: (url, data, params, options) ->\n options = _.merge({method: \"POST\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n put: (url, data, params, options) ->\n options = _.merge({method: \"PUT\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n patch: (url, data, params, options) ->\n options = _.merge({method: \"PATCH\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n delete: (url, data, params, options) ->\n options = _.merge({method: \"DELETE\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgHttp\", HttpService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/location.coffee\n###\n\n\nlocationFactory = ($location, $route, $rootscope) ->\n $location.noreload = (scope) ->\n lastRoute = $route.current\n un = scope.$on \"$locationChangeSuccess\", ->\n $route.current = lastRoute\n un()\n\n return $location\n\n $location.isInCurrentRouteParams = (name, value) ->\n params = $location.search() || {}\n\n return params[name] == value\n\n return $location\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.factory(\"$tgLocation\", [\"$location\", \"$route\", \"$rootScope\", locationFactory])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/model.coffee\n###\n\nclass Model\n constructor: (name, data, dataTypes) ->\n @._attrs = data\n @._name = name\n @._dataTypes = dataTypes\n\n @.setAttrs(data)\n @.initialize()\n\n clone: ->\n instance = new Model(@._name, @._attrs, @._dataTypes)\n instance._modifiedAttrs = @._modifiedAttrs\n instance._isModified = @._isModified\n return instance\n\n applyCasts: ->\n for attrName, castName of @._dataTypes\n castMethod = service.casts[castName]\n if not castMethod\n continue\n\n @._attrs[attrName] = castMethod(@._attrs[attrName])\n\n getIdAttrName: ->\n return \"id\"\n\n getName: ->\n return @._name\n\n getAttrs: (patch=false) ->\n if @._attrs.version?\n @._modifiedAttrs.version = @._attrs.version\n\n if patch\n return _.extend({}, @._modifiedAttrs)\n return _.extend({}, @._attrs, @._modifiedAttrs)\n\n setAttrs: (attrs) ->\n @._attrs = attrs\n @._modifiedAttrs = {}\n\n @.applyCasts()\n @._isModified = false\n\n setAttr: (name, value) ->\n @._modifiedAttrs[name] = value\n @._isModified = true\n\n initialize: () ->\n self = @\n\n getter = (name) ->\n return ->\n if typeof(name) == 'string' and name.substr(0,2) == \"__\"\n return self[name]\n\n if name not in _.keys(self._modifiedAttrs)\n return self._attrs[name]\n\n return self._modifiedAttrs[name]\n\n setter = (name) ->\n return (value) ->\n if typeof(name) == 'string' and name.substr(0,2) == \"__\"\n self[name] = value\n return\n\n if self._attrs[name] != value\n self._modifiedAttrs[name] = value\n self._isModified = true\n else\n delete self._modifiedAttrs[name]\n\n return\n\n _.each @_attrs, (value, name) ->\n options =\n get: getter(name)\n set: setter(name)\n enumerable: true\n configurable: true\n\n Object.defineProperty(self, name, options)\n\n serialize: () ->\n data =\n \"data\": _.clone(@_attrs)\n \"name\": @_name\n\n return JSON.stringify(data)\n\n isModified: ->\n return this._isModified\n\n isAttributeModified: (attribute) ->\n return @._modifiedAttrs[attribute]?\n\n markSaved: () ->\n @._isModified = false\n @._attrs = @.getAttrs()\n @._modifiedAttrs = {}\n\n revert: () ->\n @_modifiedAttrs = {}\n @_isModified = false\n\n @desSerialize = (sdata) ->\n ddata = JSON.parse(sdata)\n model = new Model(ddata.url, ddata.data)\n return model\n\n\ntaiga = @.taiga\n\nclass ModelService extends taiga.Service\n @.$inject = [\"$q\", \"$tgUrls\", \"$tgStorage\", \"$tgHttp\"]\n\n constructor: (@q, @urls, @storage, @http) ->\n super()\n\nprovider = ($q, $http, $gmUrls, $gmStorage) ->\n service = {}\n service.make_model = (name, data, cls=Model, dataTypes={}) ->\n return new cls(name, data, dataTypes)\n\n service.cls = Model\n service.casts = {\n int: (value) ->\n return parseInt(value, 10)\n\n float: (value) ->\n return parseFloat(value, 10)\n }\n\n return service\n\nmodule = angular.module(\"taigaBase\")\nmodule.factory(\"$tgModel\", [\"$q\", \"$http\", \"$tgUrls\", \"$tgStorage\", provider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/navurl.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaBase\")\n\n\n#############################################################################\n## Navigation Urls Service\n#############################################################################\n\nclass NavigationUrlsService extends taiga.Service\n constructor: ->\n @.urls = {}\n\n update: (urls) ->\n @.urls = _.merge({}, @.urls, urls or {})\n\n formatUrl: (url, ctx={}) ->\n replacer = (match) ->\n match = trim(match, \":\")\n return ctx[match] or \"undefined\"\n return url.replace(/(:\\w+)/g, replacer)\n\n resolve: (name, ctx) ->\n url = @.urls[name]\n return \"\" if not url\n return @.formatUrl(url, ctx) if ctx\n return url\n\nmodule.service(\"$tgNavUrls\", NavigationUrlsService)\n\n\n#############################################################################\n## Navigation Urls Directive\n#############################################################################\n\nNavigationUrlsDirective = ($navurls, $auth, $q, $location) ->\n # Example:\n # link(tg-nav=\"project-backlog:project='sss',\")\n\n # bindOnce version that uses $q for offer\n # promise based api\n bindOnceP = ($scope, attr) ->\n defered = $q.defer()\n bindOnce $scope, attr, (v) ->\n defered.resolve(v)\n return defered.promise\n\n parseNav = (data, $scope) ->\n [name, params] = _.map(data.split(\":\"), trim)\n if params\n # split by 'xxx='\n # example\n # project=vm.timeline.getIn(['data', 'project', 'slug']), ref=vm.timeline.getIn(['obj', 'ref'])\n # [\"\", \"project\", \"vm.timeline.getIn(['data', 'project', 'slug']), \", \"ref\", \"vm.timeline.getIn(['obj', 'ref'])\"]\n result = params.split(/(\\w+)=/)\n\n # remove empty string\n result = _.filter result, (str) -> return str.length\n\n # remove , at the end of the string\n result = _.map result, (str) -> return trim(str.replace(/,$/g, ''))\n\n params = []\n index = 0\n\n # ['param1', 'value'] => [{'param1': 'value'}]\n while index < result.length\n obj = {}\n obj[result[index]] = result[index + 1]\n params.push obj\n index = index + 2\n else\n params = []\n\n values = _.map params, (param) -> _.values(param)[0]\n promises = _.map(values, (x) -> bindOnceP($scope, x))\n\n return $q.all(promises).then ->\n options = {}\n for param in params\n key = Object.keys(param)[0]\n value = param[key]\n\n options[key] = $scope.$eval(value)\n return [name, options]\n\n link = ($scope, $el, $attrs) ->\n if $el.is(\"a\")\n $el.attr(\"href\", \"#\")\n\n $el.on \"mouseenter\", (event) ->\n target = $(event.currentTarget)\n\n if !target.data(\"fullUrl\")\n parseNav($attrs.tgNav, $scope).then (result) ->\n [name, options] = result\n user = $auth.getUser()\n options.user = user.username if user\n\n url = $navurls.resolve(name)\n fullUrl = $navurls.formatUrl(url, options)\n\n if $attrs.tgNavGetParams\n getURLParams = JSON.parse($attrs.tgNavGetParams)\n getURLParamsStr = $.param(getURLParams)\n fullUrl = \"#{fullUrl}?#{getURLParamsStr}\"\n\n target.data(\"fullUrl\", fullUrl)\n\n if target.is(\"a\")\n target.attr(\"href\", fullUrl)\n\n $el.on \"click\", (event) ->\n if event.metaKey || event.ctrlKey\n return\n\n event.preventDefault()\n target = $(event.currentTarget)\n\n if target.hasClass('noclick')\n return\n\n fullUrl = target.data(\"fullUrl\")\n\n switch event.which\n when 1\n $location.url(fullUrl)\n $scope.$apply()\n when 2\n window.open fullUrl\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgNav\", [\"$tgNavUrls\", \"$tgAuth\", \"$q\", \"$tgLocation\", NavigationUrlsDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/repository.coffee\n###\n\ntaiga = @.taiga\n\nclass RepositoryService extends taiga.Service\n @.$inject = [\"$q\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\"]\n\n constructor: (@q, @model, @storage, @http, @urls) ->\n super()\n\n resolveUrlForModel: (model) ->\n idAttrName = model.getIdAttrName()\n return \"#{@urls.resolve(model.getName())}/#{model[idAttrName]}\"\n\n resolveUrlForAttributeModel: (model) ->\n return @urls.resolve(model.getName(), model.parent)\n\n create: (name, data, dataTypes={}, extraParams={}) ->\n defered = @q.defer()\n url = @urls.resolve(name)\n\n promise = @http.post(url, JSON.stringify(data))\n promise.success (_data, _status) =>\n defered.resolve(@model.make_model(name, _data, null, dataTypes))\n\n promise.error (data, status) =>\n defered.reject(data)\n\n return defered.promise\n\n remove: (model, params={}) ->\n defered = @q.defer()\n url = @.resolveUrlForModel(model)\n\n promise = @http.delete(url, {}, params)\n promise.success (data, status) ->\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(model)\n\n return defered.promise\n\n saveAll: (models, patch=true) ->\n promises = _.map(models, (x) => @.save(x, true))\n return @q.all(promises)\n\n save: (model, patch=true) ->\n defered = @q.defer()\n\n if not model.isModified() and patch\n defered.resolve(model)\n return defered.promise\n\n url = @.resolveUrlForModel(model)\n data = JSON.stringify(model.getAttrs(patch))\n\n if patch\n promise = @http.patch(url, data)\n else\n promise = @http.put(url, data)\n\n promise.success (data, status) =>\n model._isModified = false\n model._attrs = _.extend(model.getAttrs(), data)\n model._modifiedAttrs = {}\n\n model.applyCasts()\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(data)\n\n return defered.promise\n\n saveAttribute: (model, attribute, patch=true) ->\n defered = @q.defer()\n\n if not model.isModified() and patch\n defered.resolve(model)\n return defered.promise\n\n url = @.resolveUrlForAttributeModel(model)\n\n data = {}\n\n data[attribute] = model.getAttrs()\n\n if patch\n promise = @http.patch(url, data)\n else\n promise = @http.put(url, data)\n\n promise.success (data, status) =>\n model._isModified = false\n model._attrs = _.extend(model.getAttrs(), data)\n model._modifiedAttrs = {}\n\n model.applyCasts()\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(data)\n\n return defered.promise\n\n refresh: (model) ->\n defered = @q.defer()\n\n url = @.resolveUrlForModel(model)\n promise = @http.get(url)\n promise.success (data, status) ->\n model._modifiedAttrs = {}\n model._attrs = data\n model._isModified = false\n model.applyCasts()\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(data)\n\n return defered.promise\n\n queryMany: (name, params, options={}, headers=false) ->\n url = @urls.resolve(name)\n httpOptions = {headers: {}}\n\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return @http.get(url, params, httpOptions).then (data) =>\n result = _.map(data.data, (x) => @model.make_model(name, x))\n\n if headers\n return [result, data.headers]\n\n return result\n\n queryOneAttribute: (name, id, attribute, params, options={}) ->\n url = @urls.resolve(name, id)\n httpOptions = {headers: {}}\n\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return @http.get(url, params, httpOptions).then (data) =>\n model = @model.make_model(name, data.data[attribute])\n model.parent = id\n\n return model\n\n queryOne: (name, id, params, options={}) ->\n url = @urls.resolve(name)\n url = \"#{url}/#{id}\" if id\n httpOptions = {headers: {}}\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return @http.get(url, params, httpOptions).then (data) =>\n return @model.make_model(name, data.data)\n\n queryOneRaw: (name, id, params, options={}) ->\n url = @urls.resolve(name)\n url = \"#{url}/#{id}\" if id\n httpOptions = _.merge({headers: {}}, options)\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n return @http.get(url, params, httpOptions).then (data) =>\n return data.data\n\n queryPaginated: (name, params, options={}) ->\n url = @urls.resolve(name)\n httpOptions = _.merge({headers: {}}, options)\n return @http.get(url, params, httpOptions).then (data) =>\n headers = data.headers()\n result = {}\n result.models = _.map(data.data, (x) => @model.make_model(name, x))\n result.count = parseInt(headers[\"x-pagination-count\"], 10)\n result.current = parseInt(headers[\"x-pagination-current\"] or 1, 10)\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10)\n return result\n\n queryOnePaginatedRaw: (name, id, params, options={}) ->\n url = @urls.resolve(name)\n url = \"#{url}/#{id}\" if id\n httpOptions = _.merge({headers: {}}, options)\n\n return @http.get(url, params, httpOptions).then (data) =>\n headers = data.headers()\n result = {}\n result.data = data.data\n result.count = parseInt(headers[\"x-pagination-count\"], 10)\n result.current = parseInt(headers[\"x-pagination-current\"] or 1, 10)\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10)\n\n return result\n\n resolve: (options) ->\n params = {}\n params.project = options.pslug if options.pslug?\n params.us = options.usref if options.usref?\n params.task = options.taskref if options.taskref?\n params.issue = options.issueref if options.issueref?\n params.milestone = options.sslug if options.sslug?\n params.wikipage = options.wikipage if options.wikipage?\n\n cache = not (options.wikipage or options.sslug)\n return @.queryOneRaw(\"resolver\", null, params, {cache: cache})\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgRepo\", RepositoryService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/storage.coffee\n###\n\ntaiga = @.taiga\n\nclass StorageService extends taiga.Service\n @.$inject = [\"$rootScope\"]\n\n constructor: ($rootScope) ->\n super()\n\n get: (key, _default) ->\n serializedValue = localStorage.getItem(key)\n if serializedValue == null\n return _default or null\n\n return JSON.parse(serializedValue)\n\n set: (key, val) ->\n if _.isObject(key)\n _.each key, (val, key) =>\n @set(key, val)\n else\n localStorage.setItem(key, JSON.stringify(val))\n\n contains: (key) ->\n value = @.get(key)\n return (value != null)\n\n remove: (key) ->\n localStorage.removeItem(key)\n\n clear: ->\n localStorage.clear()\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgStorage\", StorageService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/http.coffee\n###\n\nformat = (fmt, obj) ->\n obj = _.clone(obj)\n return fmt.replace /%s/g, (match) -> String(obj.shift())\n\ntaiga = @.taiga\n\nclass UrlsService extends taiga.Service\n @.$inject = [\"$tgConfig\"]\n\n constructor: (@config) ->\n @.urls = {}\n @.mainUrl = @config.get(\"api\")\n\n update: (urls) ->\n @.urls = _.merge(@.urls, urls)\n\n resolve: ->\n args = _.toArray(arguments)\n\n if args.length == 0\n throw Error(\"wrong arguments to setUrls\")\n\n name = args.slice(0, 1)[0]\n url = format(@.urls[name], args.slice(1))\n\n return format(\"%s/%s\", [\n _.str.rtrim(@.mainUrl, \"/\"),\n _.str.ltrim(url, \"/\")\n ])\n\n resolveAbsolute: ->\n url = @.resolve.apply(@, arguments)\n if (/^https?:\\/\\//i).test(url)\n return url\n if (/^\\//).test(url)\n return \"#{window.location.protocol}//#{window.location.host}#{url}\"\n return \"#{window.location.protocol}//#{window.location.host}/#{url}\"\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service('$tgUrls', UrlsService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/attachments.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($rootScope, $config, $urls, $model, $repo, $auth, $q) ->\n service = {}\n\n service.list = (urlName, objectId, projectId) ->\n params = {object_id: objectId, project: projectId}\n return $repo.queryMany(urlName, params)\n\n service.create = (urlName, projectId, objectId, file) ->\n defered = $q.defer()\n\n if file is undefined\n defered.reject(null)\n return defered.promise\n\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n if maxFileSize and file.size > maxFileSize\n response = {\n status: 413,\n data: _error_message: \"'#{file.name}' (#{sizeFormat(file.size)}) is too heavy for our oompa\n loompas, try it with a smaller than (#{sizeFormat(maxFileSize)})\"\n }\n defered.reject(response)\n return defered.promise\n\n uploadProgress = (evt) =>\n $rootScope.$apply =>\n file.status = \"in-progress\"\n file.size = sizeFormat(evt.total)\n file.progressMessage = \"upload #{sizeFormat(evt.loaded)} of #{sizeFormat(evt.total)}\"\n file.progressPercent = \"#{Math.round((evt.loaded / evt.total) * 100)}%\"\n\n uploadComplete = (evt) =>\n $rootScope.$apply ->\n file.status = \"done\"\n\n status = evt.target.status\n try\n data = JSON.parse(evt.target.responseText)\n catch\n data = {}\n\n if status >= 200 and status < 400\n model = $model.make_model(urlName, data)\n defered.resolve(model)\n else\n response = {\n status: status,\n data: {_error_message: data['attached_file']?[0]}\n }\n defered.reject(response)\n\n uploadFailed = (evt) =>\n $rootScope.$apply ->\n file.status = \"error\"\n defered.reject(\"fail\")\n\n data = new FormData()\n data.append(\"project\", projectId)\n data.append(\"object_id\", objectId)\n data.append(\"attached_file\", file)\n\n xhr = new XMLHttpRequest()\n xhr.upload.addEventListener(\"progress\", uploadProgress, false)\n xhr.addEventListener(\"load\", uploadComplete, false)\n xhr.addEventListener(\"error\", uploadFailed, false)\n\n xhr.open(\"POST\", $urls.resolve(urlName))\n xhr.setRequestHeader(\"Authorization\", \"Bearer #{$auth.getToken()}\")\n xhr.setRequestHeader('Accept', 'application/json')\n xhr.send(data)\n\n return defered.promise\n\n return (instance) ->\n instance.attachments = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgAttachmentsResourcesProvider\", [\"$rootScope\", \"$tgConfig\", \"$tgUrls\", \"$tgModel\", \"$tgRepo\",\n \"$tgAuth\", \"$q\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/custom-field-values.coffee\n###\n\ntaiga = @.taiga\n\nresourceProvider = ($repo) ->\n _get = (objectId, resource) ->\n return $repo.queryOne(resource, objectId)\n\n service = {\n userstory: {\n get: (objectId) -> _get(objectId, \"custom-attributes-values/userstory\")\n }\n task: {\n get: (objectId) -> _get(objectId, \"custom-attributes-values/task\")\n }\n issue: {\n get: (objectId) -> _get(objectId, \"custom-attributes-values/issue\")\n }\n }\n\n return (instance) ->\n instance.customAttributesValues = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgCustomAttributesValuesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/projects.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($repo) ->\n _list = (projectId, resource) ->\n return $repo.queryMany(resource, {project: projectId})\n\n service = {\n userstory:{\n list: (projectId) -> _list(projectId, \"custom-attributes/userstory\")\n }\n task:{\n list: (projectId) -> _list(projectId, \"custom-attributes/task\")\n }\n issue: {\n list: (projectId) -> _list(projectId, \"custom-attributes/issue\")\n }\n }\n\n return (instance) ->\n instance.customAttributes = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgCustomAttributesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/history.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (type, objectId) ->\n return $repo.queryOneRaw(\"history/#{type}\", objectId)\n\n service.deleteComment = (type, objectId, activityId) ->\n url = $urls.resolve(\"history/#{type}\")\n url = \"#{url}/#{objectId}/delete_comment\"\n params = {id: activityId}\n return $http.post(url, null, params).then (data) =>\n return data.data\n\n service.undeleteComment = (type, objectId, activityId) ->\n url = $urls.resolve(\"history/#{type}\")\n url = \"#{url}/#{objectId}/undelete_comment\"\n params = {id: activityId}\n return $http.post(url, null, params).then (data) =>\n return data.data\n\n return (instance) ->\n instance.history = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgHistoryResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/projects.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo) ->\n service = {}\n\n service.get = (token) ->\n return $repo.queryOne(\"invitations\", token)\n\n return (instance) ->\n instance.invitations = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgInvitationsResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/issues.coffee\n###\n\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $http, $urls, $storage, $q) ->\n service = {}\n hashSuffix = \"issues-queryparams\"\n filtersHashSuffix = \"issues-filters\"\n myFiltersHashSuffix = \"issues-my-filters\"\n\n service.get = (projectId, issueId) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n return $repo.queryOne(\"issues\", issueId, params)\n\n service.getByRef = (projectId, ref) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n params.ref = ref\n return $repo.queryOne(\"issues\", \"by_ref\", params)\n\n service.listInAllProjects = (filters) ->\n return $repo.queryMany(\"issues\", filters)\n\n service.list = (projectId, filters, options) ->\n params = {project: projectId}\n params = _.extend({}, params, filters or {})\n service.storeQueryParams(projectId, params)\n return $repo.queryPaginated(\"issues\", params, options)\n\n service.bulkCreate = (projectId, data) ->\n url = $urls.resolve(\"bulk-create-issues\")\n params = {project_id: projectId, bulk_issues: data}\n return $http.post(url, params)\n\n service.upvote = (issueId) ->\n url = $urls.resolve(\"issue-upvote\", issueId)\n return $http.post(url)\n\n service.downvote = (issueId) ->\n url = $urls.resolve(\"issue-downvote\", issueId)\n return $http.post(url)\n\n service.watch = (issueId) ->\n url = $urls.resolve(\"issue-watch\", issueId)\n return $http.post(url)\n\n service.unwatch = (issueId) ->\n url = $urls.resolve(\"issue-unwatch\", issueId)\n return $http.post(url)\n\n service.stats = (projectId) ->\n return $repo.queryOneRaw(\"projects\", \"#{projectId}/issues_stats\")\n\n service.filtersData = (params) ->\n return $repo.queryOneRaw(\"issues-filters\", null, params)\n\n service.listValues = (projectId, type) ->\n params = {\"project\": projectId}\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(type, params)\n\n service.storeQueryParams = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getQueryParams = (projectId) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeFilters = (projectSlug, params) ->\n ns = \"#{projectSlug}:#{filtersHashSuffix}\"\n hash = generateHash([projectSlug, ns])\n $storage.set(hash, params)\n\n service.getFilters = (projectSlug) ->\n ns = \"#{projectSlug}:#{filtersHashSuffix}\"\n hash = generateHash([projectSlug, ns])\n return $storage.get(hash) or {}\n\n service.storeMyFilters = (projectId, myFilters) ->\n deferred = $q.defer()\n url = $urls.resolve(\"user-storage\")\n ns = \"#{projectId}:#{myFiltersHashSuffix}\"\n hash = generateHash([projectId, ns])\n if _.isEmpty(myFilters)\n promise = $http.delete(\"#{url}/#{hash}\", {key: hash, value:myFilters})\n promise.then ->\n deferred.resolve()\n promise.then null, ->\n deferred.reject()\n else\n promise = $http.put(\"#{url}/#{hash}\", {key: hash, value:myFilters})\n promise.then (data) ->\n deferred.resolve()\n promise.then null, (data) ->\n innerPromise = $http.post(\"#{url}\", {key: hash, value:myFilters})\n innerPromise.then ->\n deferred.resolve()\n innerPromise.then null, ->\n deferred.reject()\n return deferred.promise\n\n service.getMyFilters = (projectId) ->\n deferred = $q.defer()\n url = $urls.resolve(\"user-storage\")\n ns = \"#{projectId}:#{myFiltersHashSuffix}\"\n hash = generateHash([projectId, ns])\n\n promise = $http.get(\"#{url}/#{hash}\")\n promise.then (data) ->\n deferred.resolve(data.data.value)\n promise.then null, (data) ->\n deferred.resolve({})\n\n return deferred.promise\n\n return (instance) ->\n instance.issues = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgIssuesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/kanban.coffee\n###\n\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($storage) ->\n service = {}\n hashSuffixStatusViewModes = \"kanban-statusviewmodels\"\n hashSuffixStatusColumnModes = \"kanban-statuscolumnmodels\"\n\n service.storeStatusViewModes = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffixStatusViewModes}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getStatusViewModes = (projectId) ->\n ns = \"#{projectId}:#{hashSuffixStatusViewModes}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeStatusColumnModes = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getStatusColumnModes = (projectId) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n return (instance) ->\n instance.kanban = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgKanbanResourcesProvider\", [\"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2015 Andrey Antukh \n# Copyright (C) 2015 Jesús Espino Garcia \n# Copyright (C) 2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/locales.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($repo) ->\n service = {\n list: -> return $repo.queryMany(\"locales\")\n }\n\n return (instance) ->\n instance.locales = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgLocalesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/mdrender.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.render = (projectId, content) ->\n # We can't use an empty content\n content = ' ' if not content? or content == \"\"\n\n params = {\n project_id: projectId\n content: content\n }\n url = $urls.resolve(\"wiki\")\n return $http.post(\"#{url}/render\", params).then (data) =>\n return data.data\n\n return (instance) ->\n instance.mdrender = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgMdRenderResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (id) ->\n return $repo.queryOne(\"memberships\", id)\n\n service.list = (projectId, filters, enablePagination=true) ->\n params = {project: projectId}\n params = _.extend({}, params, filters or {})\n if enablePagination\n return $repo.queryPaginated(\"memberships\", params)\n\n return $repo.queryMany(\"memberships\", params, options={enablePagination:enablePagination})\n\n service.listByUser = (userId, filters) ->\n params = {user: userId}\n params = _.extend({}, params, filters or {})\n return $repo.queryPaginated(\"memberships\", params)\n\n service.resendInvitation = (id) ->\n url = $urls.resolve(\"memberships\")\n return $http.post(\"#{url}/#{id}/resend_invitation\", {})\n\n service.bulkCreateMemberships = (projectId, data, invitation_extra_text) ->\n url = $urls.resolve(\"bulk-create-memberships\")\n params = {project_id: projectId, bulk_memberships: data, invitation_extra_text: invitation_extra_text}\n return $http.post(url, params)\n\n return (instance) ->\n instance.memberships = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgMembershipsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules.coffee\n###\n\nresourceProvider = ($repo) ->\n service = {}\n\n service.list = (projectId, module) ->\n return $repo.queryOneAttribute(\"project-modules\", projectId, module)\n\n return (instance) ->\n instance.modules = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgModulesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (id) ->\n return $repo.queryOne(\"notify-policies\", id)\n\n service.list = (filters) ->\n params = _.extend({}, params, filters or {})\n return $repo.queryMany(\"notify-policies\", params)\n\n return (instance) ->\n instance.notifyPolicies = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgNotifyPoliciesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/projects.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($config, $repo, $http, $urls, $auth, $q, $translate) ->\n service = {}\n\n service.get = (projectId) ->\n return $repo.queryOne(\"projects\", projectId)\n\n service.getBySlug = (projectSlug) ->\n return $repo.queryOne(\"projects\", \"by_slug?slug=#{projectSlug}\")\n\n service.list = ->\n return $repo.queryMany(\"projects\")\n\n service.listByMember = (memberId) ->\n params = {\"member\": memberId, \"order_by\": \"memberships__user_order\"}\n return $repo.queryMany(\"projects\", params)\n\n service.templates = ->\n return $repo.queryMany(\"project-templates\")\n\n service.usersList = (projectId) ->\n params = {\"project\": projectId}\n return $repo.queryMany(\"users\", params)\n\n service.rolesList = (projectId) ->\n params = {\"project\": projectId}\n return $repo.queryMany(\"roles\", params)\n\n service.stats = (projectId) ->\n return $repo.queryOneRaw(\"projects\", \"#{projectId}/stats\")\n\n service.bulkUpdateOrder = (bulkData) ->\n url = $urls.resolve(\"bulk-update-projects-order\")\n return $http.post(url, bulkData)\n\n service.regenerate_userstories_csv_uuid = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/regenerate_userstories_csv_uuid\"\n return $http.post(url)\n\n service.regenerate_issues_csv_uuid = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/regenerate_issues_csv_uuid\"\n return $http.post(url)\n\n service.regenerate_tasks_csv_uuid = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/regenerate_tasks_csv_uuid\"\n return $http.post(url)\n\n service.leave = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/leave\"\n return $http.post(url)\n\n service.memberStats = (projectId) ->\n return $repo.queryOneRaw(\"projects\", \"#{projectId}/member_stats\")\n\n service.tagsColors = (projectId) ->\n return $repo.queryOne(\"projects\", \"#{projectId}/tags_colors\")\n\n service.export = (projectId) ->\n url = \"#{$urls.resolve(\"exporter\")}/#{projectId}\"\n return $http.get(url)\n\n service.import = (file, statusUpdater) ->\n defered = $q.defer()\n\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n if maxFileSize and file.size > maxFileSize\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED\", {\n fileName: file.name\n fileSize: sizeFormat(file.size)\n maxFileSize: sizeFormat(maxFileSize)\n })\n\n response = {\n status: 413,\n data: _error_message: errorMsg\n }\n defered.reject(response)\n return defered.promise\n\n uploadProgress = (evt) =>\n percent = Math.round((evt.loaded / evt.total) * 100)\n message = $translate.instant(\"PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE\", {\n uploadedSize: sizeFormat(evt.loaded)\n totalSize: sizeFormat(evt.total)\n })\n statusUpdater(\"in-progress\", null, message, percent)\n\n uploadComplete = (evt) =>\n statusUpdater(\"done\",\n $translate.instant(\"PROJECT.IMPORT.TITLE\"),\n $translate.instant(\"PROJECT.IMPORT.DESCRIPTION\"))\n\n uploadFailed = (evt) =>\n statusUpdater(\"error\")\n\n complete = (evt) =>\n response = {}\n try\n response.data = JSON.parse(evt.target.responseText)\n catch\n response.data = {}\n response.status = evt.target.status\n\n defered.resolve(response) if response.status in [201, 202]\n defered.reject(response)\n\n failed = (evt) =>\n defered.reject(\"fail\")\n\n data = new FormData()\n data.append('dump', file)\n\n xhr = new XMLHttpRequest()\n xhr.upload.addEventListener(\"progress\", uploadProgress, false)\n xhr.upload.addEventListener(\"load\", uploadComplete, false)\n xhr.upload.addEventListener(\"error\", uploadFailed, false)\n xhr.upload.addEventListener(\"abort\", uploadFailed, false)\n xhr.addEventListener(\"load\", complete, false)\n xhr.addEventListener(\"error\", failed, false)\n\n xhr.open(\"POST\", $urls.resolve(\"importer\"))\n xhr.setRequestHeader(\"Authorization\", \"Bearer #{$auth.getToken()}\")\n xhr.setRequestHeader('Accept', 'application/json')\n xhr.send(data)\n\n return defered.promise\n\n return (instance) ->\n instance.projects = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgProjectsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgAuth\",\n \"$q\", \"$translate\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (id) ->\n return $repo.queryOne(\"roles\", id)\n\n service.list = (projectId) ->\n return $repo.queryMany(\"roles\", {project: projectId})\n\n return (instance) ->\n instance.roles = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgRolesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/search.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.do = (projectId, term) ->\n url = $urls.resolve(\"search\")\n params = {\n project: projectId\n text: term,\n get_all: false\n }\n\n return $http.get(url, params).then (data) ->\n return data.data\n\n return (instance) ->\n instance.search = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgSearchResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/sprints.coffee\n###\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $model, $storage) ->\n service = {}\n\n service.get = (projectId, sprintId) ->\n return $repo.queryOne(\"milestones\", sprintId).then (sprint) ->\n uses = sprint.user_stories\n uses = _.map(uses, (u) -> $model.make_model(\"userstories\", u))\n sprint._attrs.user_stories = uses\n return sprint\n\n service.stats = (projectId, sprintId) ->\n return $repo.queryOneRaw(\"milestones\", \"#{sprintId}/stats\")\n\n service.list = (projectId, filters) ->\n params = {\"project\": projectId}\n params = _.extend({}, params, filters or {})\n return $repo.queryMany(\"milestones\", params, {}, true).then (result) =>\n milestones = result[0]\n headers = result[1]\n\n for m in milestones\n uses = m.user_stories\n uses = _.map(uses, (u) => $model.make_model(\"userstories\", u))\n m._attrs.user_stories = uses\n\n return {\n milestones: milestones,\n closed: parseInt(headers(\"Taiga-Info-Total-Closed-Milestones\"), 10),\n open: parseInt(headers(\"Taiga-Info-Total-Opened-Milestones\"), 10)\n }\n\n\n return (instance) ->\n instance.sprints = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgSprintsResourcesProvider\", [\"$tgRepo\", \"$tgModel\", \"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/tasks.coffee\n###\n\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $http, $urls, $storage) ->\n service = {}\n hashSuffix = \"tasks-queryparams\"\n hashSuffixStatusColumnModes = \"tasks-statuscolumnmodels\"\n hashSuffixUsRowModes = \"tasks-usrowmodels\"\n\n service.get = (projectId, taskId) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n return $repo.queryOne(\"tasks\", taskId, params)\n\n service.getByRef = (projectId, ref) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n params.ref = ref\n return $repo.queryOne(\"tasks\", \"by_ref\", params)\n\n service.listInAllProjects = (filters) ->\n return $repo.queryMany(\"tasks\", filters)\n\n service.list = (projectId, sprintId=null, userStoryId=null) ->\n params = {project: projectId}\n params.milestone = sprintId if sprintId\n params.user_story = userStoryId if userStoryId\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(\"tasks\", params)\n\n service.bulkCreate = (projectId, sprintId, usId, data) ->\n url = $urls.resolve(\"bulk-create-tasks\")\n params = {project_id: projectId, sprint_id: sprintId, us_id: usId, bulk_tasks: data}\n return $http.post(url, params).then (result) ->\n return result.data\n\n service.upvote = (taskId) ->\n url = $urls.resolve(\"task-upvote\", taskId)\n return $http.post(url)\n\n service.downvote = (taskId) ->\n url = $urls.resolve(\"task-downvote\", taskId)\n return $http.post(url)\n\n service.watch = (taskId) ->\n url = $urls.resolve(\"task-watch\", taskId)\n return $http.post(url)\n\n service.unwatch = (taskId) ->\n url = $urls.resolve(\"task-unwatch\", taskId)\n return $http.post(url)\n\n service.bulkUpdateTaskTaskboardOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-task-taskboard-order\")\n params = {project_id: projectId, bulk_tasks: data}\n return $http.post(url, params)\n\n service.listValues = (projectId, type) ->\n params = {\"project\": projectId}\n return $repo.queryMany(type, params)\n\n service.storeQueryParams = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getQueryParams = (projectId) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeStatusColumnModes = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getStatusColumnModes = (projectId) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeUsRowModes = (projectId, sprintId, params) ->\n ns = \"#{projectId}:#{hashSuffixUsRowModes}\"\n hash = generateHash([projectId, sprintId, ns])\n\n $storage.set(hash, params)\n\n service.getUsRowModes = (projectId, sprintId) ->\n ns = \"#{projectId}:#{hashSuffixUsRowModes}\"\n hash = generateHash([projectId, sprintId, ns])\n\n return $storage.get(hash) or {}\n\n return (instance) ->\n instance.tasks = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgTasksResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($config, $repo, $http, $urls, $q) ->\n service = {}\n\n service.changeAvatar = (file) ->\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n if maxFileSize and file.size > maxFileSize\n response = {\n status: 413,\n data: _error_message: \"'#{file.name}' (#{sizeFormat(file.size)}) is too heavy for our oompa\n loompas, try it with a smaller than (#{sizeFormat(maxFileSize)})\"\n }\n defered = $q.defer()\n defered.reject(response)\n return defered.promise\n\n data = new FormData()\n data.append('avatar', file)\n options = {\n transformRequest: angular.identity,\n headers: {'Content-Type': undefined}\n }\n url = \"#{$urls.resolve(\"users\")}/change_avatar\"\n return $http.post(url, data, {}, options)\n\n service.removeAvatar = () ->\n url = \"#{$urls.resolve(\"users\")}/remove_avatar\"\n return $http.post(url)\n\n service.changePassword = (currentPassword, newPassword) ->\n url = \"#{$urls.resolve(\"users\")}/change_password\"\n data = {\n current_password: currentPassword\n password: newPassword\n }\n return $http.post(url, data)\n\n return (instance) ->\n instance.userSettings = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgUserSettingsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$q\",\n resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/user.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($http, $urls) ->\n service = {}\n\n service.contacts = (userId, options={}) ->\n url = $urls.resolve(\"user-contacts\", userId)\n httpOptions = {headers: {}}\n\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return $http.get(url, {}, httpOptions)\n .then (result) ->\n return result.data\n\n return (instance) ->\n instance.users = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgUsersResourcesProvider\", [\"$tgHttp\", \"$tgUrls\", \"$q\",\n resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/userstories.coffee\n###\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $http, $urls, $storage) ->\n service = {}\n hashSuffix = \"userstories-queryparams\"\n\n service.get = (projectId, usId) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n return $repo.queryOne(\"userstories\", usId, params)\n\n service.getByRef = (projectId, ref) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n params.ref = ref\n return $repo.queryOne(\"userstories\", \"by_ref\", params)\n\n service.listInAllProjects = (filters) ->\n return $repo.queryMany(\"userstories\", filters)\n\n service.filtersData = (params) ->\n return $repo.queryOneRaw(\"userstories-filters\", null, params)\n\n service.listUnassigned = (projectId, filters) ->\n params = {\"project\": projectId, \"milestone\": \"null\"}\n params = _.extend({}, params, filters or {})\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(\"userstories\", params)\n\n service.listAll = (projectId, filters) ->\n params = {\"project\": projectId}\n params = _.extend({}, params, filters or {})\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(\"userstories\", params)\n\n service.bulkCreate = (projectId, status, bulk) ->\n data = {\n project_id: projectId\n status_id: status\n bulk_stories: bulk\n }\n\n url = $urls.resolve(\"bulk-create-us\")\n\n return $http.post(url, data)\n\n service.upvote = (userStoryId) ->\n url = $urls.resolve(\"userstory-upvote\", userStoryId)\n return $http.post(url)\n\n service.downvote = (userStoryId) ->\n url = $urls.resolve(\"userstory-downvote\", userStoryId)\n return $http.post(url)\n\n service.watch = (userStoryId) ->\n url = $urls.resolve(\"userstory-watch\", userStoryId)\n return $http.post(url)\n\n service.unwatch = (userStoryId) ->\n url = $urls.resolve(\"userstory-unwatch\", userStoryId)\n return $http.post(url)\n\n service.bulkUpdateBacklogOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-us-backlog-order\")\n params = {project_id: projectId, bulk_stories: data}\n return $http.post(url, params)\n\n service.bulkUpdateSprintOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-us-sprint-order\")\n params = {project_id: projectId, bulk_stories: data}\n return $http.post(url, params)\n\n service.bulkUpdateKanbanOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-us-kanban-order\")\n params = {project_id: projectId, bulk_stories: data}\n return $http.post(url, params)\n\n service.listValues = (projectId, type) ->\n params = {\"project\": projectId}\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(type, params)\n\n service.storeQueryParams = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getQueryParams = (projectId) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeShowTags = (projectId, showTags) ->\n hash = generateHash([projectId, 'showTags'])\n $storage.set(hash, showTags)\n\n service.getShowTags = (projectId) ->\n hash = generateHash([projectId, 'showTags'])\n return $storage.get(hash) or null\n\n return (instance) ->\n instance.userstories = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgUserstoriesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: webhooklogs.coffee\n###\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.list = (webhookId) ->\n params = {webhook: webhookId}\n return $repo.queryMany(\"webhooklogs\", params)\n\n service.resend = (webhooklogId) ->\n url = $urls.resolve(\"webhooklogs-resend\", webhooklogId)\n return $http.post(url)\n\n return (instance) ->\n instance.webhooklogs = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgWebhookLogsResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: webhooks.coffee\n###\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.list = (projectId) ->\n params = {project: projectId}\n return $repo.queryMany(\"webhooks\", params)\n\n service.test = (webhookId) ->\n url = $urls.resolve(\"webhooks-test\", webhookId)\n return $http.post(url)\n\n return (instance) ->\n instance.webhooks = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgWebhooksResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/wikis.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (wikiId) ->\n return $repo.queryOne(\"wiki\", wikiId)\n\n service.getBySlug = (projectId, slug) ->\n return $repo.queryOne(\"wiki\", \"by_slug?project=#{projectId}&slug=#{slug}\")\n\n service.listLinks = (projectId) ->\n return $repo.queryMany(\"wiki-links\", {project: projectId})\n\n return (instance) ->\n instance.wiki = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgWikiResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaUserSettings\")\n\n\n#############################################################################\n## User ChangePassword Controller\n#############################################################################\n\nclass UserChangePasswordController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAuth\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @auth, @translate) ->\n @scope.sectionName = @translate.instant(\"CHANGE_PASSWORD.SECTION_NAME\")\n @scope.user = @auth.getUser()\n\nmodule.controller(\"UserChangePasswordController\", UserChangePasswordController)\n\n\n#############################################################################\n## User ChangePassword Directive\n#############################################################################\n\nUserChangePasswordDirective = ($rs, $confirm, $loading, $translate) ->\n link = ($scope, $el, $attrs, ctrl) ->\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if $scope.newPassword1 != $scope.newPassword2\n $confirm.notify('error', $translate.instant(\"CHANGE_PASSWORD.ERROR_PASSWORD_MATCH\"))\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $rs.userSettings.changePassword($scope.currentPassword, $scope.newPassword1)\n promise.then =>\n currentLoading.finish()\n $confirm.notify('success')\n\n promise.then null, (response) =>\n currentLoading.finish()\n $confirm.notify('error', response.data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link\n }\n\nmodule.directive(\"tgUserChangePassword\", [\"$tgResources\", \"$tgConfirm\", \"$tgLoading\", \"$translate\", UserChangePasswordDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaUserSettings\")\n\n\n#############################################################################\n## Delete User Lightbox Directive\n#############################################################################\n\nDeleteUserDirective = ($repo, $rootscope, $auth, $location, $navUrls, lightboxService) ->\n link = ($scope, $el, $attrs) ->\n $scope.$on \"deletelightbox:new\", (ctx, user)->\n lightboxService.open($el)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n submit = ->\n promise = $repo.remove($scope.user)\n\n promise.then (data) ->\n lightboxService.close($el)\n $auth.logout()\n $location.path($navUrls.resolve(\"login\"))\n\n # FIXME: error handling?\n promise.then null, ->\n console.log \"FAIL\"\n\n $el.on \"click\", \".button-red\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n $el.on \"click\", \".button-green\", debounce 2000, (event) ->\n event.preventDefault()\n submit()\n\n return {\n link: link,\n templateUrl: \"user/lightbox/lightbox-delete-account.html\"\n }\n\nmodule.directive(\"tgLbDeleteUser\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\",\n \"lightboxService\", DeleteUserDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/main.coffee\n###\n\ntaiga = @.taiga\nmixOf = @.taiga.mixOf\nsizeFormat = @.taiga.sizeFormat\nmodule = angular.module(\"taigaUserSettings\")\ndebounce = @.taiga.debounce\n\n#############################################################################\n## User settings Controller\n#############################################################################\n\nclass UserSettingsController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgConfig\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAuth\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @config, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @auth, @translate) ->\n @scope.sectionName = \"USER_SETTINGS.MENU.SECTION_TITLE\"\n\n @scope.project = {}\n @scope.user = @auth.getUser()\n\n if !@scope.user\n @location.path(@navUrls.resolve(\"permission-denied\"))\n @location.replace()\n\n @scope.lang = @getLan()\n @scope.theme = @getTheme()\n\n maxFileSize = @config.get(\"maxUploadFileSize\", null)\n if maxFileSize\n text = @translate.instant(\"USER_SETTINGS.AVATAR_MAX_SIZE\", {\"maxFileSize\": sizeFormat(maxFileSize)})\n @scope.maxFileSizeMsg = text\n\n promise = @.loadInitialData()\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadInitialData: ->\n @scope.availableThemes = @config.get(\"themes\", [])\n\n return @rs.locales.list().then (locales) =>\n @scope.locales = locales\n return locales\n\n openDeleteLightbox: ->\n @rootscope.$broadcast(\"deletelightbox:new\", @scope.user)\n\n getLan: ->\n return @scope.user.lang ||\n @translate.preferredLanguage()\n\n getTheme: ->\n return @scope.user.theme ||\n @config.get(\"defaultTheme\") ||\n \"taiga\"\n\nmodule.controller(\"UserSettingsController\", UserSettingsController)\n\n\n#############################################################################\n## User Profile Directive\n#############################################################################\n\nUserProfileDirective = ($confirm, $auth, $repo, $translate) ->\n link = ($scope, $el, $attrs) ->\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n return if not form.validate()\n\n changeEmail = $scope.user.isAttributeModified(\"email\")\n $scope.user.lang = $scope.lang\n $scope.user.theme = $scope.theme\n\n onSuccess = (data) =>\n $auth.setUser(data)\n\n if changeEmail\n text = $translate.instant(\"USER_PROFILE.CHANGE_EMAIL_SUCCESS\")\n $confirm.success(text)\n else\n $confirm.notify('success')\n\n onError = (data) =>\n form.setErrors(data)\n $confirm.notify('error', data._error_message)\n\n $repo.save($scope.user).then(onSuccess, onError)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgUserProfile\", [\"$tgConfirm\", \"$tgAuth\", \"$tgRepo\", \"$translate\", UserProfileDirective])\n\n\n#############################################################################\n## User Avatar Directive\n#############################################################################\n\nUserAvatarDirective = ($auth, $model, $rs, $confirm) ->\n link = ($scope, $el, $attrs) ->\n showSizeInfo = ->\n $el.find(\".size-info\").removeClass(\"hidden\")\n\n onSuccess = (response) ->\n user = $model.make_model(\"users\", response.data)\n $auth.setUser(user)\n $scope.user = user\n\n $el.find('.overlay').addClass('hidden')\n $confirm.notify('success')\n\n onError = (response) ->\n showSizeInfo() if response.status == 413\n $el.find('.overlay').addClass('hidden')\n $confirm.notify('error', response.data._error_message)\n\n # Change photo\n $el.on \"click\", \".js-change-avatar\", ->\n $el.find(\"#avatar-field\").click()\n\n $el.on \"change\", \"#avatar-field\", (event) ->\n if $scope.avatarAttachment\n $el.find('.overlay').removeClass('hidden')\n $rs.userSettings.changeAvatar($scope.avatarAttachment).then(onSuccess, onError)\n\n # Use gravatar photo\n $el.on \"click\", \"a.use-gravatar\", (event) ->\n $el.find('.overlay').removeClass('hidden')\n $rs.userSettings.removeAvatar().then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgUserAvatar\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", UserAvatarDirective])\n\n\n#############################################################################\n## User Avatar Model Directive\n#############################################################################\n\nTaigaAvatarModelDirective = ($parse) ->\n link = ($scope, $el, $attrs) ->\n model = $parse($attrs.tgAvatarModel)\n modelSetter = model.assign\n\n $el.bind 'change', ->\n $scope.$apply ->\n modelSetter($scope, $el[0].files[0])\n\n return {link:link}\n\nmodule.directive('tgAvatarModel', ['$parse', TaigaAvatarModelDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/nav.coffee\n###\n\nUserSettingsNavigationDirective = ->\n link = ($scope, $el, $attrs) ->\n section = $attrs.tgUserSettingsNavigation\n $el.find(\".active\").removeClass(\"active\")\n $el.find(\"#usersettingsmenu-#{section} a\").addClass(\"active\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule = angular.module(\"taigaUserSettings\")\nmodule.directive(\"tgUserSettingsNavigation\", UserSettingsNavigationDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/notifications.coffee\n###\n\ntaiga = @.taiga\nmixOf = @.taiga.mixOf\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaUserSettings\")\n\n\n#############################################################################\n## User settings Controller\n#############################################################################\n\nclass UserNotificationsController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAuth\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @auth) ->\n @scope.sectionName = \"USER_SETTINGS.NOTIFICATIONS.SECTION_NAME\"\n @scope.user = @auth.getUser()\n promise = @.loadInitialData()\n promise.then null, @.onInitialDataError.bind(@)\n\n loadInitialData: ->\n return @rs.notifyPolicies.list().then (notifyPolicies) =>\n @scope.notifyPolicies = notifyPolicies\n return notifyPolicies\n\nmodule.controller(\"UserNotificationsController\", UserNotificationsController)\n\n\n#############################################################################\n## User Notifications Directive\n#############################################################################\n\nUserNotificationsDirective = () ->\n link = ($scope, $el, $attrs) ->\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgUserNotifications\", UserNotificationsDirective)\n\n\n#############################################################################\n## User Notifications List Directive\n#############################################################################\n\nUserNotificationsListDirective = ($repo, $confirm, $compile) ->\n template = _.template(\"\"\"\n <% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
\">\n
<%- notifyPolicy.project_name %>
\n
\n
\n \" id=\"policy-all-<%- notifyPolicy.id %>\"\n value=\"2\" <% if (notifyPolicy.notify_level == 2) { %>checked=\"checked\"<% } %>/>\n \n
\n
\n
\n
\n \" id=\"policy-involved-<%- notifyPolicy.id %>\"\n value=\"1\" <% if (notifyPolicy.notify_level == 1) { %>checked=\"checked\"<% } %> />\n \n
\n
\n
\n
\n \" id=\"policy-none-<%- notifyPolicy.id %>\"\n value=\"3\" <% if (notifyPolicy.notify_level == 3) { %>checked=\"checked\"<% } %> />\n \n
\n
\n
\n <% }) %>\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n render = ->\n $el.off()\n\n ctx = {notifyPolicies: $scope.notifyPolicies}\n html = template(ctx)\n\n $el.html($compile(html)($scope))\n\n $el.on \"change\", \"input[type=radio]\", (event) ->\n target = angular.element(event.currentTarget)\n\n policyIndex = target.parents(\".policy-table-row\").data('index')\n policy = $scope.notifyPolicies[policyIndex]\n prev_level = policy.notify_level\n policy.notify_level = parseInt(target.val(), 10)\n\n onSuccess = ->\n $confirm.notify(\"success\")\n\n onError = ->\n $confirm.notify(\"error\")\n target.parents(\".policy-table-row\")\n .find(\"input[value=#{prev_level}]\")\n .prop(\"checked\", true)\n\n $repo.save(policy).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n bindOnce($scope, $attrs.ngModel, render)\n\n return {link:link}\n\nmodule.directive(\"tgUserNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\",\n UserNotificationsListDirective])\n","###\n# Copyright (C) 2015 Taiga Agile LLC\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: components.module.coffee\n###\n\nangular.module(\"taigaComponents\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-apps.module.coffee\n###\n\nmodule = angular.module(\"taigaExternalApps\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: home.module.coffee\n###\n\nmodule = angular.module(\"taigaHome\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: navigation-bar.module.coffee\n###\n\nangular.module(\"taigaNavigationBar\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile.module.coffee\n###\n\nmodule = angular.module(\"taigaProfile\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects.module.coffee\n###\n\nangular.module(\"taigaProjects\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: resources.module.coffee\n###\n\nangular.module(\"taigaResources2\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline.module.coffee\n###\n\nangular.module(\"taigaUserTimeline\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: joy-ride.directive.coffee\n###\n\ntaiga = @.taiga\n\nJoyRideDirective = ($rootScope, currentUserService, joyRideService, $location) ->\n link = (scope, el, attrs, ctrl) ->\n unsuscribe = null\n intro = introJs()\n\n #Todo: translate\n intro.setOptions({\n exitOnEsc: false,\n exitOnOverlayClick: false,\n showStepNumbers: false,\n nextLabel: 'Next →',\n prevLabel: '← Back',\n skipLabel: 'Skip',\n doneLabel: 'Done',\n disableInteraction: true\n })\n\n intro.oncomplete () ->\n $('html,body').scrollTop(0)\n\n intro.onexit () ->\n currentUserService.disableJoyRide()\n\n initJoyrRide = (next, config) ->\n if !config[next.joyride]\n return\n\n intro.setOption('steps', joyRideService.get(next.joyride))\n intro.start()\n\n $rootScope.$on '$routeChangeSuccess', (event, next) ->\n if !next.joyride || !currentUserService.isAuthenticated()\n intro.exit()\n unsuscribe() if unsuscribe\n return\n\n\n intro.oncomplete () ->\n currentUserService.disableJoyRide(next.joyride)\n\n if next.loader\n unsuscribe = $rootScope.$on 'loader:end', () ->\n currentUserService.loadJoyRideConfig()\n .then (config) -> initJoyrRide(next, config)\n\n unsuscribe()\n else\n currentUserService.loadJoyRideConfig()\n .then (config) -> initJoyrRide(next, config)\n\n return {\n scope: {},\n link: link\n }\n\nJoyRideDirective.$inject = [\n \"$rootScope\",\n \"tgCurrentUserService\",\n \"tgJoyRideService\",\n \"$location\"\n]\n\nangular.module(\"taigaComponents\").directive(\"tgJoyRide\", JoyRideDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: joy-ride.service.coffee\n###\n\nclass JoyRideService extends taiga.Service\n @.$inject = [\n '$translate',\n 'tgCheckPermissionsService'\n ]\n\n constructor: (@translate, @checkPermissionsService) ->\n\n getConfig: () ->\n return {\n dashboard: () =>\n steps = [\n {\n element: '.project-list > section:not(.ng-hide)',\n position: 'left',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TITLE'),\n text: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TEXT')\n }\n },\n {\n element: '.working-on-container',\n position: 'right',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TITLE'),\n text: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TEXT')\n }\n },\n {\n element: '.watching-container',\n position: 'right',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP3.TITLE')\n text: [\n @translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT1'),\n @translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT2')\n ]\n }\n }\n ]\n\n if !$('.project-list .create-project-button').is(':hidden')\n steps.push({\n element: '.project-list .create-project-button',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP4.TITLE')\n text: [\n @translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT1'),\n @translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT2')\n ]\n }\n })\n\n return steps\n\n backlog: () =>\n steps = [\n {\n element: '.summary',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP1.TITLE')\n text: [\n @translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT1'),\n @translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT2')\n ]\n }\n },\n {\n element: '.backlog-table-empty',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP2.TITLE')\n text: @translate.instant('JOYRIDE.BACKLOG.STEP2.TEXT')\n }\n },\n {\n element: '.sprints',\n position: 'left',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP3.TITLE')\n text: @translate.instant('JOYRIDE.BACKLOG.STEP3.TEXT')\n }\n }\n ]\n\n if @checkPermissionsService.check('add_us')\n steps.push({\n element: '.new-us',\n position: 'rigth',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP4.TITLE')\n text: @translate.instant('JOYRIDE.BACKLOG.STEP4.TEXT')\n }\n })\n\n return steps\n\n kanban: () =>\n steps = [\n {\n element: '.kanban-table-inner',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.KANBAN.STEP1.TITLE')\n text: @translate.instant('JOYRIDE.KANBAN.STEP1.TEXT')\n }\n },\n {\n element: '.card-placeholder',\n position: 'right',\n joyride: {\n title: @translate.instant('JOYRIDE.KANBAN.STEP2.TITLE')\n text: @translate.instant('JOYRIDE.KANBAN.STEP2.TEXT')\n }\n }\n ]\n\n if @checkPermissionsService.check('add_us')\n steps.push({\n element: '.icon-plus',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.KANBAN.STEP3.TITLE')\n text: [\n @translate.instant('JOYRIDE.KANBAN.STEP3.TEXT1'),\n @translate.instant('JOYRIDE.KANBAN.STEP3.TEXT2'),\n ]\n }\n })\n\n return steps\n }\n\n get: (name) ->\n joyRides = @.getConfig()\n joyRide = joyRides[name].call(this)\n\n return _.map joyRide, (item) ->\n html = \"\"\n\n if item.joyride.title\n html += \"

#{item.joyride.title}

\"\n\n if _.isArray(item.joyride.text)\n _.forEach item.joyride.text, (text) ->\n html += \"

#{text}

\"\n else\n html += \"

#{item.joyride.text}

\"\n\n item.intro = html\n\n return item\n\nangular.module(\"taigaComponents\").service(\"tgJoyRideService\", JoyRideService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project-menu.controller.coffee\n###\n\nclass ProjectMenuController\n @.$inject = [\n \"tgProjectService\",\n \"tgLightboxFactory\"\n ]\n\n constructor: (@projectService, @lightboxFactory) ->\n @.project = null\n @.menu = Immutable.Map()\n\n show: () ->\n @.project = @projectService.project\n\n @.active = @._getActiveSection()\n\n @._setVideoConference()\n @._setMenuPermissions()\n\n hide: () ->\n @.project = null\n @.menu = {}\n\n search: () ->\n @lightboxFactory.create(\"tg-search-box\", {\n \"class\": \"lightbox lightbox-search\"\n })\n\n _setVideoConference: () ->\n videoconferenceUrl = @._videoConferenceUrl()\n\n if videoconferenceUrl\n @.project = @.project.set(\"videoconferenceUrl\", videoconferenceUrl)\n\n _setMenuPermissions: () ->\n @.menu = Immutable.Map({\n backlog: false,\n kanban: false,\n issues: false,\n wiki: false\n })\n\n if @.project.get(\"is_backlog_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_us\") != -1\n @.menu = @.menu.set(\"backlog\", true)\n\n if @.project.get(\"is_kanban_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_us\") != -1\n @.menu = @.menu.set(\"kanban\", true)\n\n if @.project.get(\"is_issues_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_issues\") != -1\n @.menu = @.menu.set(\"issues\", true)\n\n if @.project.get(\"is_wiki_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_wiki_pages\") != -1\n @.menu = @.menu.set(\"wiki\", true)\n\n _getActiveSection: () ->\n sectionName = @projectService.section\n sectionsBreadcrumb = @projectService.sectionsBreadcrumb\n\n indexBacklog = sectionsBreadcrumb.lastIndexOf(\"backlog\")\n indexKanban = sectionsBreadcrumb.lastIndexOf(\"kanban\")\n\n if indexBacklog != -1 || indexKanban != -1\n if indexKanban == -1 || indexBacklog < indexKanban\n oldSectionName = \"backlog\"\n else\n oldSectionName = \"kanban\"\n\n if sectionName == \"backlog-kanban\"\n if oldSectionName in [\"backlog\", \"kanban\"]\n sectionName = oldSectionName\n else if @.project.get(\"is_backlog_activated\") && !@.project.get(\"is_kanban_activated\")\n sectionName = \"backlog\"\n else if !@.project.get(\"is_backlog_activated\") && @.project.get(\"is_kanban_activated\")\n sectionName = \"kanban\"\n\n return sectionName\n\n _videoConferenceUrl: () ->\n if @.project.get(\"videoconferences\") == \"appear-in\"\n baseUrl = \"https://appear.in/\"\n else if @.project.get(\"videoconferences\") == \"talky\"\n baseUrl = \"https://talky.io/\"\n else if @.project.get(\"videoconferences\") == \"jitsi\"\n baseUrl = \"https://meet.jit.si/\"\n url = @.project.get(\"slug\") + \"-\" + taiga.slugify(@.project.get(\"videoconferences_extra_data\"))\n url = url.replace(/-/g, \"\")\n return baseUrl + url\n else if @.project.get(\"videoconferences\") == \"custom\"\n return @.project.get(\"videoconferences_extra_data\")\n else\n return \"\"\n\n if @.project.get(\"videoconferences_extra_data\")\n url = @.project.get(\"slug\") + \"-\" + @.project.get(\"videoconferences_extra_data\")\n else\n url = @.project.get(\"slug\")\n\n return baseUrl + url\n\nangular.module(\"taigaComponents\").controller(\"ProjectMenu\", ProjectMenuController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project-menu.directive.coffee\n###\n\ntaiga = @.taiga\n\nProjectMenuDirective = (projectService, lightboxFactory) ->\n link = (scope, el, attrs, ctrl) ->\n projectChange = () ->\n if projectService.project\n ctrl.show()\n else\n ctrl.hide()\n\n scope.$watch ( () ->\n return projectService.project\n ), projectChange\n\n return {\n scope: {},\n controller: \"ProjectMenu\",\n controllerAs: \"vm\",\n templateUrl: \"components/project-menu/project-menu.html\",\n link: link\n }\n\nProjectMenuDirective.$inject = [\n \"tgProjectService\",\n \"tgLightboxFactory\"\n]\n\nangular.module(\"taigaComponents\").directive(\"tgProjectMenu\", ProjectMenuDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee\n###\n\n\nTermsOfServiceAndPrivacyPolicyNoticeDirective = ($config) ->\n link = (scope, el, attrs) ->\n scope.privacyPolicyUrl = $config.get(\"privacyPolicyUrl\")\n scope.termsOfServiceUrl = $config.get(\"termsOfServiceUrl\")\n\n return {\n restrict: \"AE\",\n scope: {},\n link: link,\n templateUrl: \"components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html\"\n }\n\nangular.module(\"taigaComponents\")\n .directive(\"tgTermsOfServiceAndPrivacyPolicyNotice\", [\n \"$tgConfig\",\n TermsOfServiceAndPrivacyPolicyNoticeDirective\n ])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: vote-button.controller.coffee\n###\n\nclass VoteButtonController\n @.$inject = [\n \"tgCurrentUserService\",\n ]\n\n constructor: (@currentUserService) ->\n @.user = @currentUserService.getUser()\n @.isMouseOver = false\n @.loading = false\n\n showTextWhenMouseIsOver: ->\n @.isMouseOver = true\n\n showTextWhenMouseIsLeave: ->\n @.isMouseOver = false\n\n toggleVote: ->\n @.loading = true\n\n if not @.item.is_voter\n promise = @._upvote()\n else\n promise = @._downvote()\n\n promise.finally () => @.loading = false\n\n return promise\n\n _upvote: ->\n @.onUpvote().then =>\n @.showTextWhenMouseIsLeave()\n\n _downvote: ->\n @.onDownvote()\n\nangular.module(\"taigaComponents\").controller(\"VoteButton\", VoteButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: vote-button.directive.coffee\n###\n\nVoteButtonDirective = ->\n return {\n scope: {}\n controller: \"VoteButton\",\n bindToController: {\n item: \"=\",\n onUpvote: \"=\",\n onDownvote: \"=\"\n }\n controllerAs: \"vm\",\n templateUrl: \"components/vote-button/vote-button.html\",\n }\n\nangular.module(\"taigaComponents\").directive(\"tgVoteButton\", VoteButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-button.controller.coffee\n###\n\nclass WatchButtonController\n @.$inject = [\n \"tgCurrentUserService\",\n ]\n\n constructor: (@currentUserService) ->\n @.user = @currentUserService.getUser()\n @.isMouseOver = false\n @.loading = false\n\n showTextWhenMouseIsOver: ->\n @.isMouseOver = true\n\n showTextWhenMouseIsLeave: ->\n @.isMouseOver = false\n\n toggleWatch: ->\n @.loading = true\n\n if not @.item.is_watcher\n promise = @._watch()\n else\n promise = @._unwatch()\n\n promise.finally () => @.loading = false\n\n return promise\n\n _watch: ->\n @.onWatch().then =>\n @.showTextWhenMouseIsLeave()\n\n _unwatch: ->\n @.onUnwatch()\n\nangular.module(\"taigaComponents\").controller(\"WatchButton\", WatchButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-button.directive.coffee\n###\n\nWatchButtonDirective = ->\n return {\n scope: {}\n controller: \"WatchButton\",\n bindToController: {\n item: \"=\",\n onWatch: \"=\",\n onUnwatch: \"=\"\n }\n controllerAs: \"vm\",\n templateUrl: \"components/watch-button/watch-button.html\",\n }\n\nangular.module(\"taigaComponents\").directive(\"tgWatchButton\", WatchButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-app.controller.coffee\n###\n\ntaiga = @.taiga\n\nclass ExternalAppController extends taiga.Controller\n @.$inject = [\n \"$routeParams\",\n \"tgExternalAppsService\",\n \"$window\",\n \"tgCurrentUserService\",\n \"$location\",\n \"$tgNavUrls\",\n \"tgXhrErrorService\",\n \"tgLoader\"\n ]\n\n constructor: (@routeParams, @externalAppsService, @window, @currentUserService, @location,\n @navUrls, @xhrError, @loader) ->\n @loader.start(false)\n @._applicationId = @routeParams.application\n @._state = @routeParams.state\n @._getApplicationToken()\n @._user = @currentUserService.getUser()\n @._application = null\n nextUrl = encodeURIComponent(@location.url())\n loginUrl = @navUrls.resolve(\"login\")\n @.loginWithAnotherUserUrl = \"#{loginUrl}?next=#{nextUrl}\"\n\n taiga.defineImmutableProperty @, \"user\", () => @._user\n taiga.defineImmutableProperty @, \"application\", () => @._application\n\n _redirect: (applicationToken) =>\n nextUrl = applicationToken.get(\"next_url\")\n @window.open(nextUrl, \"_self\")\n\n _getApplicationToken: =>\n return @externalAppsService.getApplicationToken(@._applicationId, @._state)\n .then (data) =>\n @._application = data.get(\"application\")\n if data.get(\"auth_code\")\n @._redirect(data)\n else\n @loader.pageLoaded()\n\n .catch (xhr) =>\n @loader.pageLoaded()\n return @xhrError.response(xhr)\n\n cancel: () ->\n @window.history.back()\n\n createApplicationToken: =>\n return @externalAppsService.authorizeApplicationToken(@._applicationId, @._state)\n .then (data) =>\n @._redirect(data)\n .catch (xhr) =>\n return @xhrError.response(xhr)\n\n\nangular.module(\"taigaExternalApps\").controller(\"ExternalApp\", ExternalAppController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-app.service.coffee\n###\n\nclass ExternalAppsService extends taiga.Service\n @.$inject = [\n \"tgResources\"\n ]\n\n constructor: (@rs) ->\n\n getApplicationToken: (applicationId, state) ->\n return @rs.externalapps.getApplicationToken(applicationId, state)\n\n authorizeApplicationToken: (applicationId, state) ->\n return @rs.externalapps.authorizeApplicationToken(applicationId, state)\n\nangular.module(\"taigaExternalApps\").service(\"tgExternalAppsService\", ExternalAppsService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: feedback.service.coffee\n###\n\nclass FeedbackService extends taiga.Service\n @.$inject = [\"tgLightboxFactory\"]\n\n constructor: (@lightboxFactory) ->\n\n sendFeedback: ->\n @lightboxFactory.create(\"tg-lb-feedback\", {\n \"class\": \"lightbox lightbox-feedback lightbox-generic-form\"\n })\n\nangular.module(\"taigaFeedback\").service(\"tgFeedbackService\", FeedbackService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: duty.directive.coffee\n###\n\nDutyDirective = (navurls, $translate) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n scope.vm.duty = scope.duty\n\n scope.vm.getDutyType = () ->\n if scope.vm.duty\n if scope.vm.duty.get('_name') == \"userstories\"\n return $translate.instant(\"COMMON.USER_STORY\")\n if scope.vm.duty.get('_name') == \"tasks\"\n return $translate.instant(\"COMMON.TASK\")\n if scope.vm.duty.get('_name') == \"issues\"\n return $translate.instant(\"COMMON.ISSUE\")\n\n return {\n templateUrl: \"home/duties/duty.html\"\n scope: {\n \"duty\": \"=tgDuty\"\n }\n link: link\n }\n\nDutyDirective.$inject = [\n \"$tgNavUrls\",\n \"$translate\"\n]\n\nangular.module(\"taigaHome\").directive(\"tgDuty\", DutyDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: home.service.coffee\n###\n\ngroupBy = @.taiga.groupBy\n\nclass HomeService extends taiga.Service\n @.$inject = [\n \"$tgNavUrls\",\n \"tgResources\",\n \"tgProjectsService\"\n ]\n\n constructor: (@navurls, @rs, @projectsService) ->\n\n _attachProjectInfoToWorkInProgress: (workInProgress, projectsById) ->\n _attachProjectInfoToDuty = (duty, objType) =>\n project = projectsById.get(String(duty.get('project')))\n\n ctx = {\n project: project.get('slug')\n ref: duty.get('ref')\n }\n\n url = @navurls.resolve(\"project-#{objType}-detail\", ctx)\n\n duty = duty.set('url', url)\n duty = duty.set('projectName', project.get('name'))\n duty = duty.set(\"_name\", objType)\n\n return duty\n\n assignedTo = workInProgress.get(\"assignedTo\")\n\n if assignedTo.get(\"userStories\")\n _duties = assignedTo.get(\"userStories\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"userstories\")\n\n assignedTo = assignedTo.set(\"userStories\", _duties)\n\n if assignedTo.get(\"tasks\")\n _duties = assignedTo.get(\"tasks\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"tasks\")\n\n assignedTo = assignedTo.set(\"tasks\", _duties)\n\n if assignedTo.get(\"issues\")\n _duties = assignedTo.get(\"issues\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"issues\")\n\n assignedTo = assignedTo.set(\"issues\", _duties)\n\n watching = workInProgress.get(\"watching\")\n\n if watching.get(\"userStories\")\n _duties = watching.get(\"userStories\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"userstories\")\n\n watching = watching.set(\"userStories\", _duties)\n\n if watching.get(\"tasks\")\n _duties = watching.get(\"tasks\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"tasks\")\n\n watching = watching.set(\"tasks\", _duties)\n\n if watching.get(\"issues\")\n _duties = watching.get(\"issues\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"issues\")\n\n watching = watching.set(\"issues\", _duties)\n\n\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo)\n workInProgress = workInProgress.set(\"watching\", watching)\n\n\n getWorkInProgress: (userId) ->\n projectsById = Immutable.Map()\n\n projectsPromise = @projectsService.getProjectsByUserId(userId).then (projects) ->\n projectsById = Immutable.fromJS(groupBy(projects.toJS(), (p) -> p.id))\n\n assignedTo = Immutable.Map()\n\n params = {\n status__is_closed: false\n assigned_to: userId\n }\n\n params_us = {\n is_closed: false\n assigned_to: userId\n }\n\n assignedUserStoriesPromise = @rs.userstories.listInAllProjects(params_us).then (userstories) ->\n assignedTo = assignedTo.set(\"userStories\", userstories)\n\n assignedTasksPromise = @rs.tasks.listInAllProjects(params).then (tasks) ->\n assignedTo = assignedTo.set(\"tasks\", tasks)\n\n assignedIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) ->\n assignedTo = assignedTo.set(\"issues\", issues)\n\n params = {\n status__is_closed: false\n watchers: userId\n }\n\n params_us = {\n is_closed: false\n watchers: userId\n }\n\n watching = Immutable.Map()\n\n watchingUserStoriesPromise = @rs.userstories.listInAllProjects(params_us).then (userstories) ->\n watching = watching.set(\"userStories\", userstories)\n\n watchingTasksPromise = @rs.tasks.listInAllProjects(params).then (tasks) ->\n watching = watching.set(\"tasks\", tasks)\n\n watchingIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) ->\n watching = watching.set(\"issues\", issues)\n\n workInProgress = Immutable.Map()\n\n Promise.all([\n projectsPromise\n assignedUserStoriesPromise,\n assignedTasksPromise,\n assignedIssuesPromise,\n watchingUserStoriesPromise,\n watchingTasksPromise,\n watchingIssuesPromise\n ]).then =>\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo)\n workInProgress = workInProgress.set(\"watching\", watching)\n\n workInProgress = @._attachProjectInfoToWorkInProgress(workInProgress, projectsById)\n\n return workInProgress\n\nangular.module(\"taigaHome\").service(\"tgHomeService\", HomeService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: home-project-list.directive.coffee\n###\n\nHomeProjectListDirective = (currentUserService, projectsService) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n\n taiga.defineImmutableProperty(scope.vm, \"projects\", () -> currentUserService.projects.get(\"recents\"))\n\n scope.vm.newProject = ->\n projectsService.newProject()\n\n directive = {\n templateUrl: \"home/projects/home-project-list.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nHomeProjectListDirective.$inject = [\n \"tgCurrentUserService\",\n \"tgProjectsService\"\n]\n\nangular.module(\"taigaHome\").directive(\"tgHomeProjectList\", HomeProjectListDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: working-on.controller.coffee\n###\n\nclass WorkingOnController\n @.$inject = [\n \"tgHomeService\"\n ]\n\n constructor: (@homeService) ->\n @.assignedTo = Immutable.Map()\n @.watching = Immutable.Map()\n\n _setAssignedTo: (workInProgress) ->\n userStories = workInProgress.get(\"assignedTo\").get(\"userStories\")\n tasks = workInProgress.get(\"assignedTo\").get(\"tasks\")\n issues = workInProgress.get(\"assignedTo\").get(\"issues\")\n\n @.assignedTo = userStories.concat(tasks).concat(issues)\n if @.assignedTo.size > 0\n @.assignedTo = @.assignedTo.sortBy((elem) -> elem.get(\"modified_date\")).reverse()\n\n _setWatching: (workInProgress) ->\n userStories = workInProgress.get(\"watching\").get(\"userStories\")\n tasks = workInProgress.get(\"watching\").get(\"tasks\")\n issues = workInProgress.get(\"watching\").get(\"issues\")\n\n @.watching = userStories.concat(tasks).concat(issues)\n if @.watching.size > 0\n @.watching = @.watching.sortBy((elem) -> elem.get(\"modified_date\")).reverse()\n\n getWorkInProgress: (userId) ->\n return @homeService.getWorkInProgress(userId).then (workInProgress) =>\n @._setAssignedTo(workInProgress)\n @._setWatching(workInProgress)\n\nangular.module(\"taigaHome\").controller(\"WorkingOn\", WorkingOnController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: working-on.directive.coffee\n###\n\nWorkingOnDirective = (homeService, currentUserService) ->\n link = (scope, el, attrs, ctrl) ->\n user = currentUserService.getUser()\n # If we are not logged in the user will be null\n if user\n userId = user.get(\"id\")\n ctrl.getWorkInProgress(userId)\n\n return {\n controller: \"WorkingOn\",\n controllerAs: \"vm\",\n templateUrl: \"home/working-on/working-on.html\",\n scope: {},\n link: link\n }\n\nWorkingOnDirective.$inject = [\n \"tgHomeService\",\n \"tgCurrentUserService\"\n]\n\nangular.module(\"taigaHome\").directive(\"tgWorkingOn\", WorkingOnDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: dropdown-project-list.directive.coffee\n###\n\nDropdownProjectListDirective = (currentUserService, projectsService) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n\n taiga.defineImmutableProperty(scope.vm, \"projects\", () -> currentUserService.projects.get(\"recents\"))\n\n scope.vm.newProject = ->\n projectsService.newProject()\n\n directive = {\n templateUrl: \"navigation-bar/dropdown-project-list/dropdown-project-list.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nDropdownProjectListDirective.$inject = [\n \"tgCurrentUserService\",\n \"tgProjectsService\"\n]\n\nangular.module(\"taigaNavigationBar\").directive(\"tgDropdownProjectList\", DropdownProjectListDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: dropdown-user.directive.coffee\n###\n\nDropdownUserDirective = (authService, configService, locationService,\n navUrlsService, feedbackService) ->\n\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n scope.vm.isFeedbackEnabled = configService.get(\"feedbackEnabled\")\n taiga.defineImmutableProperty(scope.vm, \"user\", () -> authService.userData)\n\n scope.vm.logout = ->\n authService.logout()\n locationService.path(navUrlsService.resolve(\"login\"))\n\n scope.vm.sendFeedback = ->\n feedbackService.sendFeedback()\n\n directive = {\n templateUrl: \"navigation-bar/dropdown-user/dropdown-user.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nDropdownUserDirective.$inject = [\n \"$tgAuth\",\n \"$tgConfig\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgFeedbackService\"\n]\n\nangular.module(\"taigaNavigationBar\").directive(\"tgDropdownUser\", DropdownUserDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: navigation-bar.directive.coffee\n###\n\nNavigationBarDirective = (currentUserService, navigationBarService, $location) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n\n scope.$on \"$routeChangeSuccess\", () ->\n if $location.path() == \"/\"\n scope.vm.active = true\n else\n scope.vm.active = false\n\n taiga.defineImmutableProperty(scope.vm, \"projects\", () -> currentUserService.projects.get(\"recents\"))\n taiga.defineImmutableProperty(scope.vm, \"isAuthenticated\", () -> currentUserService.isAuthenticated())\n taiga.defineImmutableProperty(scope.vm, \"isEnabledHeader\", () -> navigationBarService.isEnabledHeader())\n\n\n directive = {\n templateUrl: \"navigation-bar/navigation-bar.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nNavigationBarDirective.$inject = [\n \"tgCurrentUserService\",\n \"tgNavigationBarService\"\n \"$location\"\n]\n\nangular.module(\"taigaNavigationBar\").directive(\"tgNavigationBar\", NavigationBarDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: navigation-bar.service.coffee\n###\n\nclass NavigationBarService extends taiga.Service\n\n constructor: ->\n @.disableHeader()\n\n enableHeader: ->\n @.enabledHeader = true\n\n disableHeader: ->\n @.enabledHeader = false\n\n isEnabledHeader: ->\n return @.enabledHeader\n\nangular.module(\"taigaNavigationBar\").service(\"tgNavigationBarService\", NavigationBarService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-bar.controller.coffee\n###\n\nclass ProfileBarController\n @.$inject = [\n \"tgUserService\"\n ]\n\n constructor: (@userService) ->\n @.loadStats()\n\n loadStats: () ->\n return @userService.getStats(@.user.get(\"id\")).then (stats) =>\n @.stats = stats\n\nangular.module(\"taigaProfile\").controller(\"ProfileBar\", ProfileBarController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-bar.directive.coffee\n###\n\nProfileBarDirective = () ->\n return {\n templateUrl: \"profile/profile-bar/profile-bar.html\",\n controller: \"ProfileBar\",\n controllerAs: \"vm\",\n scope: {\n user: \"=user\",\n isCurrentUser: \"=iscurrentuser\"\n },\n bindToController: true\n }\n\n\nangular.module(\"taigaProfile\").directive(\"tgProfileBar\", ProfileBarDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-contacts.controller.coffee\n###\n\nclass ProfileContactsController\n @.$inject = [\n \"tgUserService\",\n \"tgCurrentUserService\"\n ]\n\n constructor: (@userService, @currentUserService) ->\n @.currentUser = @currentUserService.getUser()\n\n @.isCurrentUser = false\n\n if @.currentUser && @.currentUser.get(\"id\") == @.user.get(\"id\")\n @.isCurrentUser = true\n\n loadContacts: () ->\n @userService.getContacts(@.user.get(\"id\"))\n .then (contacts) =>\n @.contacts = contacts\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileContacts\", ProfileContactsController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-contacts.directive.coffee\n###\n\nProfileContactsDirective = () ->\n link = (scope, elm, attrs, ctrl) ->\n ctrl.loadContacts()\n\n return {\n templateUrl: \"profile/profile-contacts/profile-contacts.html\",\n scope: {\n user: \"=\"\n },\n controllerAs: \"vm\",\n controller: \"ProfileContacts\",\n link: link,\n bindToController: true\n }\n\nangular.module(\"taigaProfile\").directive(\"tgProfileContacts\", ProfileContactsDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: items.directive.coffee\n###\n\nFavItemDirective = ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {item: scope.item}\n\n templateUrl = (el, attrs) ->\n if attrs.itemType == \"project\"\n return \"profile/profile-favs/items/project.html\"\n else # if attr.itemType in [\"userstory\", \"task\", \"issue\"]\n return \"profile/profile-favs/items/ticket.html\"\n\n return {\n scope: {\n \"item\": \"=tgFavItem\"\n }\n link: link\n templateUrl: templateUrl\n }\n\n\nangular.module(\"taigaProfile\").directive(\"tgFavItem\", FavItemDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-favs.controller.coffee\n###\n\ndebounceLeading = @.taiga.debounceLeading\n\nclass FavsBaseController\n constructor: ->\n @._init()\n\n #@._getItems = null # Define in inheritance classes\n #\n _init: ->\n @.enableFilterByAll = true\n @.enableFilterByProjects = true\n @.enableFilterByUserStories = true\n @.enableFilterByTasks = true\n @.enableFilterByIssues = true\n @.enableFilterByTextQuery = true\n\n @._resetList()\n @.q = null\n @.type = null\n\n _resetList: ->\n @.items = Immutable.List()\n @.scrollDisabled = false\n @._page = 1\n\n _enableLoadingSpinner: ->\n @.isLoading = true\n\n _disableLoadingSpinner: ->\n @.isLoading = false\n\n _enableScroll : ->\n @.scrollDisabled = false\n\n _disableScroll : ->\n @.scrollDisabled = true\n\n _checkIfHasMorePages: (hasNext) ->\n if hasNext\n @._page += 1\n @._enableScroll()\n else\n @._disableScroll()\n\n _checkIfHasNoResults: ->\n @.hasNoResults = @.items.size == 0\n\n loadItems: ->\n @._enableLoadingSpinner()\n @._disableScroll()\n\n @._getItems(@.user.get(\"id\"), @._page, @.type, @.q)\n .then (response) =>\n @.items = @.items.concat(response.get(\"data\"))\n\n @._checkIfHasMorePages(response.get(\"next\"))\n @._checkIfHasNoResults()\n @._disableLoadingSpinner()\n\n return @.items\n .catch =>\n @._disableLoadingSpinner()\n\n return @.items\n\n ################################################\n ## Filtre actions\n ################################################\n filterByTextQuery: debounceLeading 500, ->\n @._resetList()\n @.loadItems()\n\n showAll: ->\n if @.type isnt null\n @.type = null\n @._resetList()\n @.loadItems()\n\n showProjectsOnly: ->\n if @.type isnt \"project\"\n @.type = \"project\"\n @._resetList()\n @.loadItems()\n\n showUserStoriesOnly: ->\n if @.type isnt \"userstory\"\n @.type = \"userstory\"\n @._resetList()\n @.loadItems()\n\n showTasksOnly: ->\n if @.type isnt \"task\"\n @.type = \"task\"\n @._resetList()\n @.loadItems()\n\n showIssuesOnly: ->\n if @.type isnt \"issue\"\n @.type = \"issue\"\n @._resetList()\n @.loadItems()\n\n\n####################################################\n## Liked\n####################################################\n\nclass ProfileLikedController extends FavsBaseController\n @.$inject = [\n \"tgUserService\",\n ]\n\n constructor: (@userService) ->\n super()\n @.enableFilterByAll = false\n @.enableFilterByProjects = false\n @.enableFilterByUserStories = false\n @.enableFilterByTasks = false\n @.enableFilterByIssues = false\n @.enableFilterByTextQuery = true\n @._getItems = @userService.getLiked\n\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileLiked\", ProfileLikedController)\n\n####################################################\n## Voted\n####################################################\n\nclass ProfileVotedController extends FavsBaseController\n @.$inject = [\n \"tgUserService\",\n ]\n\n constructor: (@userService) ->\n super()\n @.enableFilterByAll = true\n @.enableFilterByProjects = false\n @.enableFilterByUserStories = true\n @.enableFilterByTasks = true\n @.enableFilterByIssues = true\n @.enableFilterByTextQuery = true\n @._getItems = @userService.getVoted\n\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileVoted\", ProfileVotedController)\n\n\n\n####################################################\n## Watched\n####################################################\n\nclass ProfileWatchedController extends FavsBaseController\n @.$inject = [\n \"tgUserService\",\n ]\n\n constructor: (@userService) ->\n super()\n @._getItems = @userService.getWatched\n\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileWatched\", ProfileWatchedController)\n\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-favs.directive.coffee\n###\n\nbase = {\n scope: {},\n bindToController: {\n user: \"=\"\n type: \"@\"\n q: \"@\"\n scrollDisabled: \"@\"\n isLoading: \"@\"\n hasNoResults: \"@\"\n }\n controller: null, # Define in directives\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-favs/profile-favs.html\",\n}\n\n\n####################################################\n## Liked\n####################################################\n\nProfileLikedDirective = () ->\n return _.extend({}, base, {\n controller: \"ProfileLiked\"\n })\n\nangular.module(\"taigaProfile\").directive(\"tgProfileLiked\", ProfileLikedDirective)\n\n\n####################################################\n## Voted\n####################################################\n\nProfileVotedDirective = () ->\n return _.extend({}, base, {\n controller: \"ProfileVoted\"\n })\n\nangular.module(\"taigaProfile\").directive(\"tgProfileVoted\", ProfileVotedDirective)\n\n\n####################################################\n## Watched\n####################################################\n\nProfileWatchedDirective = () ->\n return _.extend({}, base, {\n controller: \"ProfileWatched\"\n })\n\nangular.module(\"taigaProfile\").directive(\"tgProfileWatched\", ProfileWatchedDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-hints.controller.coffee\n###\n\nclass ProfileHints\n HINTS: [\n { #hint1\n url: \"https://taiga.io/support/import-export-projects/\"\n },\n { #hint2\n url: \"https://taiga.io/support/custom-fields/\"\n },\n { #hint3\n },\n { #hint4\n }\n ]\n constructor: (@translate) ->\n hintKey = Math.floor(Math.random() * @.HINTS.length) + 1\n\n @.hint = @.HINTS[hintKey - 1]\n\n @.hint.linkText = @.hint.linkText || 'HINTS.LINK'\n\n @.hint.title = @translate.instant(\"HINTS.HINT#{hintKey}_TITLE\")\n\n @.hint.text = @translate.instant(\"HINTS.HINT#{hintKey}_TEXT\")\n\nProfileHints.$inject = [\n \"$translate\"\n]\n\nangular.module(\"taigaProfile\").controller(\"ProfileHints\", ProfileHints)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-hints.directive.coffee\n###\n\nProfileHints = ($translate) ->\n return {\n scope: {},\n controller: \"ProfileHints\",\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-hints/profile-hints.html\"\n }\n\nProfileHints.$inject = [\n \"$translate\"\n]\n\nangular.module(\"taigaProfile\").directive(\"tgProfileHints\", ProfileHints)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-projects.controller.coffee\n###\n\nclass ProfileProjectsController\n @.$inject = [\n \"tgProjectsService\",\n \"tgUserService\"\n ]\n\n constructor: (@projectsService, @userService) ->\n\n loadProjects: () ->\n @projectsService.getProjectsByUserId(@.user.get(\"id\"))\n .then (projects) =>\n return @userService.attachUserContactsToProjects(@.user.get(\"id\"), projects)\n .then (projects) =>\n @.projects = projects\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileProjects\", ProfileProjectsController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-projects.directive.coffee\n###\n\nProfileProjectsDirective = () ->\n link = (scope, elm, attr, ctrl) ->\n ctrl.loadProjects()\n\n return {\n templateUrl: \"profile/profile-projects/profile-projects.html\",\n scope: {\n user: \"=\"\n },\n link: link\n bindToController: true,\n controllerAs: \"vm\",\n controller: \"ProfileProjects\"\n }\n\nangular.module(\"taigaProfile\").directive(\"tgProfileProjects\", ProfileProjectsDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-tab.directive.coffee\n###\n\nProfileTabDirective = () ->\n link = (scope, element, attrs, ctrl, transclude) ->\n scope.tab = {}\n\n attrs.$observe \"tgProfileTab\", (name) ->\n scope.tab.name = name\n\n attrs.$observe \"tabTitle\", (title) ->\n scope.tab.title = title\n\n scope.tab.icon = attrs.tabIcon\n scope.tab.active = !!attrs.tabActive\n\n if scope.$eval(attrs.tabDisabled) != true\n ctrl.addTab(scope.tab)\n\n return {\n templateUrl: \"profile/profile-tab/profile-tab.html\",\n scope: {},\n require: \"^tgProfileTabs\",\n link: link,\n transclude: true\n }\n\nangular.module(\"taigaProfile\")\n .directive(\"tgProfileTab\", ProfileTabDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-tabs.controller.coffee\n###\n\nclass ProfileTabsController\n constructor: () ->\n @tabs = []\n\n addTab: (tab) ->\n @tabs.push(tab)\n\n toggleTab: (tab) ->\n _.map @tabs, (tab) -> tab.active = false\n\n tab.active = true\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileTabs\", ProfileTabsController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-tabs.directive.coffee\n###\n\nProfileTabsDirective = () ->\n return {\n scope: {}\n controller: \"ProfileTabs\"\n controllerAs: \"vm\"\n templateUrl: \"profile/profile-tabs/profile-tabs.html\"\n transclude: true\n }\n\nangular.module(\"taigaProfile\")\n .directive(\"tgProfileTabs\", ProfileTabsDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile.controller.coffee\n###\n\nclass ProfileController\n @.$inject = [\n \"tgAppMetaService\",\n \"tgCurrentUserService\",\n \"$routeParams\",\n \"tgUserService\",\n \"tgXhrErrorService\",\n \"$translate\"\n ]\n\n constructor: (@appMetaService, @currentUserService, @routeParams, @userService, @xhrError, @translate) ->\n @.isCurrentUser = false\n\n if @routeParams.slug\n @userService\n .getUserByUserName(@routeParams.slug)\n .then (user) =>\n if !user.get('is_active')\n @xhrError.notFound()\n else\n @.user = user\n @.isCurrentUser = false\n @._setMeta(@.user)\n\n return user\n .catch (xhr) =>\n return @xhrError.response(xhr)\n\n else\n @.user = @currentUserService.getUser()\n @.isCurrentUser = true\n @._setMeta(@.user)\n\n _setMeta: (user) ->\n ctx = {\n userFullName: user.get(\"full_name_display\"),\n userUsername: user.get(\"username\")\n }\n\n title = @translate.instant(\"USER.PROFILE.PAGE_TITLE\", ctx)\n\n description = user.get(\"bio\")\n @appMetaService.setAll(title, description)\n\nangular.module(\"taigaProfile\").controller(\"Profile\", ProfileController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: like-project-button.controller.coffee\n###\n\nclass LikeProjectButtonController\n @.$inject = [\n \"$tgConfirm\"\n \"tgLikeProjectButtonService\"\n ]\n\n constructor: (@confirm, @likeButtonService)->\n @.isMouseOver = false\n @.loading = false\n\n showTextWhenMouseIsOver: ->\n @.isMouseOver = true\n\n showTextWhenMouseIsLeave: ->\n @.isMouseOver = false\n\n toggleLike: ->\n @.loading = true\n\n if not @.project.get(\"is_fan\")\n promise = @._like()\n else\n promise = @._unlike()\n\n promise.finally () => @.loading = false\n\n return promise\n\n _like: ->\n return @likeButtonService.like(@.project.get('id'))\n .then =>\n @.showTextWhenMouseIsLeave()\n .catch =>\n @confirm.notify(\"error\")\n\n _unlike: ->\n return @likeButtonService.unlike(@.project.get('id')).catch =>\n @confirm.notify(\"error\")\n\nangular.module(\"taigaProjects\").controller(\"LikeProjectButton\", LikeProjectButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: like-project-button.directive.coffee\n###\n\nLikeProjectButtonDirective = ->\n return {\n scope: {}\n controller: \"LikeProjectButton\",\n bindToController: {\n project: '='\n }\n controllerAs: \"vm\",\n templateUrl: \"projects/components/like-project-button/like-project-button.html\",\n }\n\nangular.module(\"taigaProjects\").directive(\"tgLikeProjectButton\", LikeProjectButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: like-project-button.service.coffee\n###\n\ntaiga = @.taiga\n\nclass LikeProjectButtonService extends taiga.Service\n @.$inject = [\"tgResources\", \"tgCurrentUserService\", \"tgProjectService\"]\n\n constructor: (@rs, @currentUserService, @projectService) ->\n\n _getProjectIndex: (projectId) ->\n return @currentUserService.projects\n .get('all')\n .findIndex (project) -> project.get('id') == projectId\n\n _updateProjects: (projectId, isFan) ->\n projectIndex = @._getProjectIndex(projectId)\n projects = @currentUserService.projects\n .get('all')\n .update projectIndex, (project) ->\n\n totalFans = project.get(\"total_fans\")\n\n if isFan then totalFans++ else totalFans--\n\n return project.merge({\n is_fan: isFan,\n total_fans: totalFans\n })\n\n @currentUserService.setProjects(projects)\n\n _updateCurrentProject: (isFan) ->\n totalFans = @projectService.project.get(\"total_fans\")\n\n if isFan then totalFans++ else totalFans--\n\n project = @projectService.project.merge({\n is_fan: isFan,\n total_fans: totalFans\n })\n\n @projectService.setProject(project)\n\n like: (projectId) ->\n return @rs.projects.likeProject(projectId).then =>\n @._updateProjects(projectId, true)\n @._updateCurrentProject(true)\n\n unlike: (projectId) ->\n return @rs.projects.unlikeProject(projectId).then =>\n @._updateProjects(projectId, false)\n @._updateCurrentProject(false)\n\nangular.module(\"taigaProjects\").service(\"tgLikeProjectButtonService\", LikeProjectButtonService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: sort-projects.directive.coffee\n###\n\nSortProjectsDirective = (currentUserService) ->\n link = (scope, el, attrs, ctrl) ->\n itemEl = null\n\n el.sortable({\n dropOnEmpty: true\n revert: 200\n axis: \"y\"\n opacity: .95\n placeholder: 'placeholder'\n cancel: '.project-name'\n })\n\n el.on \"sortstop\", (event, ui) ->\n itemEl = ui.item\n project = itemEl.scope().project\n index = itemEl.index()\n\n sorted_project_ids = _.map(scope.projects.toJS(), (p) -> p.id)\n sorted_project_ids = _.without(sorted_project_ids, project.get(\"id\"))\n sorted_project_ids.splice(index, 0, project.get('id'))\n\n sortData = []\n\n for value, index in sorted_project_ids\n sortData.push({\"project_id\": value, \"order\":index})\n\n currentUserService.bulkUpdateProjectsOrder(sortData)\n\n directive = {\n scope: {\n projects: \"=tgSortProjects\"\n },\n link: link\n }\n\n return directive\n\nangular.module(\"taigaProjects\").directive(\"tgSortProjects\", [\"tgCurrentUserService\", SortProjectsDirective])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-project-button.controller.coffee\n###\n\nclass WatchProjectButtonController\n @.$inject = [\n \"$tgConfirm\"\n \"tgWatchProjectButtonService\"\n ]\n\n constructor: (@confirm, @watchButtonService)->\n @.showWatchOptions = false\n @.loading = false\n\n toggleWatcherOptions: () ->\n @.showWatchOptions = !@.showWatchOptions\n\n closeWatcherOptions: () ->\n @.showWatchOptions = false\n\n watch: (notifyLevel) ->\n @.loading = true\n @.closeWatcherOptions()\n\n return @watchButtonService.watch(@.project.get('id'), notifyLevel)\n .catch () => @confirm.notify(\"error\")\n .finally () => @.loading = false\n\n unwatch: ->\n @.loading = true\n @.closeWatcherOptions()\n\n return @watchButtonService.unwatch(@.project.get('id'))\n .catch () => @confirm.notify(\"error\")\n .finally () => @.loading = false\n\nangular.module(\"taigaProjects\").controller(\"WatchProjectButton\", WatchProjectButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-project-button.directive.coffee\n###\n\nWatchProjectButtonDirective = ->\n return {\n scope: {}\n controller: \"WatchProjectButton\",\n bindToController: {\n project: \"=\"\n }\n controllerAs: \"vm\",\n templateUrl: \"projects/components/watch-project-button/watch-project-button.html\",\n }\n\nangular.module(\"taigaProjects\").directive(\"tgWatchProjectButton\", WatchProjectButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-project-button.service.coffee\n###\n\ntaiga = @.taiga\n\nclass WatchProjectButtonService extends taiga.Service\n @.$inject = [\n \"tgResources\",\n \"tgCurrentUserService\",\n \"tgProjectService\"\n ]\n\n constructor: (@rs, @currentUserService, @projectService) ->\n\n _getProjectIndex: (projectId) ->\n return @currentUserService.projects\n .get('all')\n .findIndex (project) -> project.get('id') == projectId\n\n\n _updateProjects: (projectId, notifyLevel, isWatcher) ->\n projectIndex = @._getProjectIndex(projectId)\n\n projects = @currentUserService.projects\n .get('all')\n .update projectIndex, (project) =>\n totalWatchers = project.get('total_watchers')\n\n if isWatcher then totalWatchers++ else totalWatchers--\n\n return project.merge({\n is_watcher: isWatcher,\n total_watchers: totalWatchers\n notify_level: notifyLevel\n })\n\n @currentUserService.setProjects(projects)\n\n _updateCurrentProject: (notifyLevel, isWatcher) ->\n totalWatchers = @projectService.project.get(\"total_watchers\")\n\n if isWatcher then totalWatchers++ else totalWatchers--\n\n project = @projectService.project.merge({\n is_watcher: isWatcher,\n total_watchers: totalWatchers\n notify_level: notifyLevel\n })\n\n @projectService.setProject(project)\n\n watch: (projectId, notifyLevel) ->\n return @rs.projects.watchProject(projectId, notifyLevel).then =>\n @._updateProjects(projectId, notifyLevel, true)\n @._updateCurrentProject(notifyLevel, true)\n\n unwatch: (projectId) ->\n return @rs.projects.unwatchProject(projectId).then =>\n @._updateProjects(projectId, null, false)\n @._updateCurrentProject(null, false)\n\nangular.module(\"taigaProjects\").service(\"tgWatchProjectButtonService\", WatchProjectButtonService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects-listing.controller.coffee\n###\n\nclass ProjectsListingController\n @.$inject = [\n \"tgCurrentUserService\",\n \"tgProjectsService\",\n ]\n\n constructor: (@currentUserService, @projectsService) ->\n taiga.defineImmutableProperty(@, \"projects\", () => @currentUserService.projects.get(\"all\"))\n\n newProject: ->\n @projectsService.newProject()\n\nangular.module(\"taigaProjects\").controller(\"ProjectsListing\", ProjectsListingController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project.controller.coffee\n###\n\nclass ProjectController\n @.$inject = [\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$tgAuth\",\n \"$translate\",\n \"tgProjectService\"\n ]\n\n constructor: (@routeParams, @appMetaService, @auth, @translate, @projectService) ->\n projectSlug = @routeParams.pslug\n @.user = @auth.userData\n\n taiga.defineImmutableProperty @, \"project\", () => return @projectService.project\n taiga.defineImmutableProperty @, \"members\", () => return @projectService.activeMembers\n\n @appMetaService.setfn @._setMeta.bind(this)\n\n _setMeta: (project)->\n metas = {}\n\n return metas if !@.project\n\n ctx = {projectName: @.project.get(\"name\")}\n\n metas.title = @translate.instant(\"PROJECT.PAGE_TITLE\", ctx)\n metas.description = @.project.get(\"description\")\n\n return metas\n\nangular.module(\"taigaProjects\").controller(\"Project\", ProjectController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects.service.coffee\n###\n\ntaiga = @.taiga\ngroupBy = @.taiga.groupBy\n\nclass ProjectsService extends taiga.Service\n @.$inject = [\"tgResources\", \"$projectUrl\", \"tgLightboxFactory\"]\n\n constructor: (@rs, @projectUrl, @lightboxFactory) ->\n\n getProjectBySlug: (projectSlug) ->\n return @rs.projects.getProjectBySlug(projectSlug)\n .then (project) =>\n return @._decorate(project)\n\n getProjectStats: (projectId) ->\n return @rs.projects.getProjectStats(projectId)\n\n getProjectsByUserId: (userId, paginate) ->\n return @rs.projects.getProjectsByUserId(userId, paginate)\n .then (projects) =>\n return projects.map @._decorate.bind(@)\n\n _decorate: (project) ->\n url = @projectUrl.get(project.toJS())\n\n project = project.set(\"url\", url)\n colorized_tags = []\n\n if project.get(\"tags\")\n tags = project.get(\"tags\").sort()\n\n colorized_tags = tags.map (tag) ->\n color = project.get(\"tags_colors\").get(tag)\n return Immutable.fromJS({name: tag, color: color})\n\n project = project.set(\"colorized_tags\", colorized_tags)\n\n return project\n\n newProject: ->\n @lightboxFactory.create(\"tg-lb-create-project\", {\n \"class\": \"wizard-create-project\"\n })\n\n bulkUpdateProjectsOrder: (sortData) ->\n return @rs.projects.bulkUpdateOrder(sortData)\n\nangular.module(\"taigaProjects\").service(\"tgProjectsService\", ProjectsService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-apps-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.getApplicationToken = (applicationId, state) ->\n url = urlsService.resolve(\"applications\")\n url = \"#{url}/#{applicationId}/token?state=#{state}\"\n return http.get(url).then (result) ->\n Immutable.fromJS(result.data)\n\n service.authorizeApplicationToken = (applicationId, state) ->\n url = urlsService.resolve(\"application-tokens\")\n url = \"#{url}/authorize\"\n data = {\n \"state\": state\n \"application\": applicationId\n }\n\n return http.post(url, data).then (result) ->\n Immutable.fromJS(result.data)\n\n return () ->\n return {\"externalapps\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgExternalAppsResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: issues-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.listInAllProjects = (params) ->\n url = urlsService.resolve(\"issues\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n return () ->\n return {\"issues\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgIssuesResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects-resource.service.coffee\n###\n\npagination = () ->\n\nResource = (urlsService, http, paginateResponseService) ->\n service = {}\n\n service.getProjectBySlug = (projectSlug) ->\n url = urlsService.resolve(\"projects\")\n\n url = \"#{url}/by_slug?slug=#{projectSlug}\"\n\n return http.get(url)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getProjectsByUserId = (userId, paginate=false) ->\n url = urlsService.resolve(\"projects\")\n httpOptions = {}\n\n if !paginate\n httpOptions.headers = {\n \"x-disable-pagination\": \"1\"\n }\n\n params = {\"member\": userId, \"order_by\": \"memberships__user_order\"}\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getProjectStats = (projectId) ->\n url = urlsService.resolve(\"projects\")\n url = \"#{url}/#{projectId}\"\n\n return http.get(url)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.bulkUpdateOrder = (bulkData) ->\n url = urlsService.resolve(\"bulk-update-projects-order\")\n return http.post(url, bulkData)\n\n service.getTimeline = (projectId, page) ->\n params = {\n page: page\n }\n\n url = urlsService.resolve(\"timeline-project\")\n url = \"#{url}/#{projectId}\"\n\n return http.get(url, params).then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.likeProject = (projectId) ->\n url = urlsService.resolve(\"project-like\", projectId)\n return http.post(url)\n\n service.unlikeProject = (projectId) ->\n url = urlsService.resolve(\"project-unlike\", projectId)\n return http.post(url)\n\n service.watchProject = (projectId, notifyPolicy) ->\n data = {\n notify_policy: notifyPolicy\n }\n url = urlsService.resolve(\"project-watch\", projectId)\n return http.post(url, data)\n\n service.unwatchProject = (projectId) ->\n url = urlsService.resolve(\"project-unwatch\", projectId)\n return http.post(url)\n\n return () ->\n return {\"projects\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgProjectsResources\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: resources.coffee\n###\n\nservices = [\n \"tgProjectsResources\",\n \"tgUserResources\",\n \"tgUsersResources\",\n \"tgUserstoriesResource\",\n \"tgTasksResource\",\n \"tgIssuesResource\",\n \"tgExternalAppsResource\"\n]\n\nResources = ($injector) ->\n for serviceName in services\n serviceFn = $injector.get(serviceName)\n\n service = $injector.invoke(serviceFn)\n\n for serviceProperty in Object.keys(service)\n if @[serviceProperty]\n console.warm(\"repeated resource \" + serviceProperty)\n\n @[serviceProperty] = service[serviceProperty]\n\n return @\n\n\nResources.$inject = [\"$injector\"]\n\nangular.module(\"taigaResources2\").service(\"tgResources\", Resources)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: tasks-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.listInAllProjects = (params) ->\n url = urlsService.resolve(\"tasks\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n return () ->\n return {\"tasks\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgTasksResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-resource.service.coffee\n###\n\nResource = (urlsService, http, paginateResponseService) ->\n service = {}\n\n service.getUserStorage = (key) ->\n url = urlsService.resolve(\"user-storage\")\n\n if key\n url += '/' + key\n\n httpOptions = {}\n\n return http.get(url, {}).then (response) ->\n return response.data.value\n\n service.setUserStorage = (key, value) ->\n url = urlsService.resolve(\"user-storage\") + '/' + key\n\n params = {\n key: key,\n value: value\n }\n\n return http.put(url, params)\n\n service.createUserStorage = (key, value) ->\n url = urlsService.resolve(\"user-storage\")\n\n params = {\n key: key,\n value: value\n }\n\n return http.post(url, params)\n\n return () ->\n return {\"user\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgUserResources\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: users-resource.service.coffee\n###\n\nResource = (urlsService, http, paginateResponseService) ->\n service = {}\n\n service.getUserByUsername = (username) ->\n url = urlsService.resolve(\"by_username\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n params = {\n username: username\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getStats = (userId) ->\n url = urlsService.resolve(\"user-stats\", userId)\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, {}, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getContacts = (userId) ->\n url = urlsService.resolve(\"user-contacts\", userId)\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, {}, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getLiked = (userId, page, type, q) ->\n url = urlsService.resolve(\"user-liked\", userId)\n\n params = {}\n params.page = page if page?\n params.type = type if type?\n params.q = q if q?\n\n return http.get(url, params)\n .then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getVoted = (userId, page, type, q) ->\n url = urlsService.resolve(\"user-voted\", userId)\n\n params = {}\n params.page = page if page?\n params.type = type if type?\n params.q = q if q?\n\n return http.get(url, params)\n .then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getWatched = (userId, page, type, q) ->\n url = urlsService.resolve(\"user-watched\", userId)\n\n params = {}\n params.page = page if page?\n params.type = type if type?\n params.q = q if q?\n\n return http.get(url, params)\n .then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getProfileTimeline = (userId, page) ->\n params = {\n page: page\n }\n\n url = urlsService.resolve(\"timeline-profile\")\n url = \"#{url}/#{userId}\"\n\n return http.get(url, params).then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getUserTimeline = (userId, page) ->\n params = {\n page: page\n }\n\n url = urlsService.resolve(\"timeline-user\")\n url = \"#{url}/#{userId}\"\n\n return http.get(url, params).then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n return () ->\n return {\"users\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgUsersResources\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: userstories-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.listInAllProjects = (params) ->\n url = urlsService.resolve(\"userstories\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n return () ->\n return {\"userstories\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgUserstoriesResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: app-meta.service.coffee\n###\n\ntaiga = @.taiga\n\ntruncate = taiga.truncate\n\n\nclass AppMetaService\n @.$inject = [\n \"$rootScope\"\n ]\n\n constructor: (@rootScope) ->\n\n _set: (key, value) ->\n return if not key\n\n if key == \"title\"\n meta = $(\"title\")\n\n if meta.length == 0\n meta = $(\"\")\n $(\"head\").append(meta)\n\n meta.text(value or \"\")\n else if key.indexOf(\"og:\") == 0\n meta = $(\"meta[property='#{key}']\")\n\n if meta.length == 0\n meta = $(\"\")\n $(\"head\").append(meta)\n\n meta.attr(\"content\", value or \"\")\n else\n meta = $(\"meta[name='#{key}']\")\n\n if meta.length == 0\n meta = $(\"\")\n $(\"head\").append(meta)\n\n meta.attr(\"content\", value or \"\")\n\n setTitle: (title) ->\n @._set('title', title)\n\n setDescription: (description) ->\n @._set(\"description\", truncate(description, 250))\n\n setTwitterMetas: (title, description) ->\n @._set(\"twitter:card\", \"summary\")\n @._set(\"twitter:site\", \"@taigaio\")\n @._set(\"twitter:title\", title)\n @._set(\"twitter:description\", truncate(description, 300))\n @._set(\"twitter:image\", \"#{window.location.origin}/images/logo-color.png\")\n\n setOpenGraphMetas: (title, description) ->\n @._set(\"og:type\", \"object\")\n @._set(\"og:site_name\", \"Taiga - Love your projects\")\n @._set(\"og:title\", title)\n @._set(\"og:description\", truncate(description, 300))\n @._set(\"og:image\", \"#{window.location.origin}/images/logo-color.png\")\n @._set(\"og:url\", window.location.href)\n\n setAll: (title, description) ->\n @.setTitle(title)\n @.setDescription(description)\n @.setTwitterMetas(title, description)\n @.setOpenGraphMetas(title, description)\n\n addMobileViewport: () ->\n $(\"head\").append(\n \"\"\n )\n\n removeMobileViewport: () ->\n $(\"meta[name=\\\"viewport\\\"]\").remove()\n\n setfn: (fn) ->\n @._listener() if @.listener\n\n @._listener = @rootScope.$watchCollection fn, (metas) =>\n @.setAll(metas.title, metas.description)\n\n\nangular.module(\"taigaCommon\").service(\"tgAppMetaService\", AppMetaService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: check-permissions.service.coffee\n###\n\ntaiga = @.taiga\n\nclass ChekcPermissionsService\n @.$inject = [\n \"tgProjectService\"\n ]\n\n constructor: (@projectService) ->\n\n check: (permission) ->\n return @projectService.project.get('my_permissions').indexOf(permission) != -1\n\nangular.module(\"taigaCommon\").service(\"tgCheckPermissionsService\", ChekcPermissionsService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: current-user.service.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\n\nclass CurrentUserService\n @.$inject = [\n \"tgProjectsService\",\n \"$tgStorage\",\n \"tgResources\"\n ]\n\n constructor: (@projectsService, @storageService, @rs) ->\n @._user = null\n @._projects = Immutable.Map()\n @._projectsById = Immutable.Map()\n @._joyride = null\n\n taiga.defineImmutableProperty @, \"projects\", () => return @._projects\n taiga.defineImmutableProperty @, \"projectsById\", () => return @._projectsById\n\n isAuthenticated: ->\n if @.getUser() != null\n return true\n return false\n\n getUser: () ->\n if !@._user\n userData = @storageService.get(\"userInfo\")\n\n if userData\n userData = Immutable.fromJS(userData)\n @.setUser(userData)\n\n return @._user\n\n removeUser: () ->\n @._user = null\n @._projects = Immutable.Map()\n @._projectsById = Immutable.Map()\n @._joyride = null\n\n setUser: (user) ->\n @._user = user\n\n return @._loadUserInfo()\n\n bulkUpdateProjectsOrder: (sortData) ->\n @projectsService.bulkUpdateProjectsOrder(sortData).then () =>\n @.loadProjects()\n\n loadProjects: () ->\n return @projectsService.getProjectsByUserId(@._user.get(\"id\"))\n .then (projects) => @.setProjects(projects)\n\n disableJoyRide: (section) ->\n if section\n @._joyride[section] = false\n else\n @._joyride = {\n backlog: false,\n kanban: false,\n dashboard: false\n }\n\n @rs.user.setUserStorage('joyride', @._joyride)\n\n loadJoyRideConfig: () ->\n return new Promise (resolve) =>\n if @._joyride != null\n resolve(@._joyride)\n return\n\n @rs.user.getUserStorage('joyride')\n .then (config) =>\n @._joyride = config\n resolve(@._joyride)\n .catch () =>\n #joyride not defined\n @._joyride = {\n backlog: true,\n kanban: true,\n dashboard: true\n }\n\n @rs.user.createUserStorage('joyride', @._joyride)\n\n resolve(@._joyride)\n\n _loadUserInfo: () ->\n return Promise.all([\n @.loadProjects()\n ])\n\n setProjects: (projects) ->\n @._projects = @._projects.set(\"all\", projects)\n @._projects = @._projects.set(\"recents\", projects.slice(0, 10))\n\n @._projectsById = Immutable.fromJS(groupBy(projects.toJS(), (p) -> p.id))\n\n return @.projects\n\nangular.module(\"taigaCommon\").service(\"tgCurrentUserService\", CurrentUserService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: lightbox-factory.service.coffee\n###\n\nclass LightboxFactory\n @.$inject = [\"$rootScope\", \"$compile\"]\n constructor: (@rootScope, @compile) ->\n\n create: (name, attrs) ->\n scope = @rootScope.$new()\n\n elm = $(\"
\")\n .attr(name, true)\n .attr(\"tg-bind-scope\", true)\n\n if attrs\n elm.attr(attrs)\n\n elm.addClass(\"remove-on-close\")\n\n html = @compile(elm)(scope)\n\n $(document.body).append(html)\n\n return\n\nangular.module(\"taigaCommon\").service(\"tgLightboxFactory\", LightboxFactory)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: paginate-response.service.coffee\n###\n\nPaginateResponse = () ->\n return (result) ->\n paginateResponse = Immutable.Map({\n \"data\": result.get(\"data\"),\n \"next\": !!result.get(\"headers\")(\"x-pagination-next\"),\n \"prev\": !!result.get(\"headers\")(\"x-pagination-prev\"),\n \"current\": result.get(\"headers\")(\"x-pagination-current\"),\n \"count\": result.get(\"headers\")(\"x-pagination-count\")\n })\n\n return paginateResponse\n\nangular.module(\"taigaCommon\").factory(\"tgPaginateResponseService\", PaginateResponse)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project.service.coffee\n###\n\ntaiga = @.taiga\n\nclass ProjectService\n @.$inject = [\n \"tgProjectsService\",\n \"tgXhrErrorService\"\n ]\n\n constructor: (@projectsService, @xhrError) ->\n @._project = null\n @._section = null\n @._sectionsBreadcrumb = Immutable.List()\n @._activeMembers = Immutable.List()\n\n taiga.defineImmutableProperty @, \"project\", () => return @._project\n taiga.defineImmutableProperty @, \"section\", () => return @._section\n taiga.defineImmutableProperty @, \"sectionsBreadcrumb\", () => return @._sectionsBreadcrumb\n taiga.defineImmutableProperty @, \"activeMembers\", () => return @._activeMembers\n\n setSection: (section) ->\n @._section = section\n\n if section\n @._sectionsBreadcrumb = @._sectionsBreadcrumb.push(@._section)\n else\n @._sectionsBreadcrumb = Immutable.List()\n\n setProjectBySlug: (pslug) ->\n return new Promise (resolve, reject) =>\n if !@.project || @.project.get('slug') != pslug\n @projectsService\n .getProjectBySlug(pslug)\n .then (project) =>\n @.setProject(project)\n resolve()\n .catch (xhr) =>\n @xhrError.response(xhr)\n\n else resolve()\n\n setProject: (project) ->\n @._project = project\n @._activeMembers = @._project.get('members').filter (member) -> member.get('is_active')\n\n cleanProject: () ->\n @._project = null\n @._activeMembers = Immutable.List()\n @._section = null\n @._sectionsBreadcrumb = Immutable.List()\n\n fetchProject: () ->\n pslug = @.project.get('slug')\n\n return @projectsService.getProjectBySlug(pslug).then (project) => @.setProject(project)\n\nangular.module(\"taigaCommon\").service(\"tgProjectService\", ProjectService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: scope-event.service.coffee\n###\n\nclass ScopeEvent\n scopes: {},\n _searchDuplicatedScopes: (id) ->\n return _.find Object.keys(@scopes), (key) =>\n return @scopes[key].$id == id\n\n _create: (name, scope) ->\n duplicatedScopeName = @._searchDuplicatedScopes(scope.$id)\n\n if duplicatedScopeName\n throw new Error(\"scopeEvent: this scope is already\n register with the name \\\"\" + duplicatedScopeName + \"\\\"\")\n\n if @scopes[name]\n throw new Error(\"scopeEvent: \\\"\" + name + \"\\\" already in use\")\n else\n scope._tgEmitter = new EventEmitter2()\n\n scope.$on \"$destroy\", () =>\n scope._tgEmitter.removeAllListeners()\n delete @scopes[name]\n\n @scopes[name] = scope\n\n emitter: (name, scope) ->\n if scope\n scope = @._create(name, scope)\n else if @scopes[name]\n scope = @scopes[name]\n else\n throw new Error(\"scopeEvent: \\\"\" + name + \"\\\" scope doesn't exist'\")\n\n return scope._tgEmitter\n\nangular.module(\"taigaCommon\").service(\"tgScopeEvent\", ScopeEvent)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: theme.service.coffee\n###\n\ntaiga = @.taiga\n\n\nclass ThemeService extends taiga.Service = ->\n use: (themeName) ->\n stylesheetEl = $(\"link[rel='stylesheet']\")\n\n if stylesheetEl.length == 0\n stylesheetEl = $(\"\")\n $(\"head\").append(stylesheetEl)\n\n stylesheetEl.attr(\"href\", \"/styles/theme-#{themeName}.css\")\n\n\nangular.module(\"taigaCommon\").service(\"tgThemeService\", ThemeService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user.service.coffee\n###\n\ntaiga = @.taiga\nbindMethods = taiga.bindMethods\n\n\nclass UserService extends taiga.Service\n @.$inject = [\"tgResources\"]\n\n constructor: (@rs) ->\n bindMethods(@)\n\n getUserByUserName: (username) ->\n return @rs.users.getUserByUsername(username)\n\n getContacts: (userId) ->\n return @rs.users.getContacts(userId)\n\n getLiked: (userId, pageNumber, objectType, textQuery) ->\n return @rs.users.getLiked(userId, pageNumber, objectType, textQuery)\n\n getVoted: (userId, pageNumber, objectType, textQuery) ->\n return @rs.users.getVoted(userId, pageNumber, objectType, textQuery)\n\n getWatched: (userId, pageNumber, objectType, textQuery) ->\n return @rs.users.getWatched(userId, pageNumber, objectType, textQuery)\n\n getStats: (userId) ->\n return @rs.users.getStats(userId)\n\n attachUserContactsToProjects: (userId, projects) ->\n return @.getContacts(userId)\n .then (contacts) ->\n projects = projects.map (project) ->\n contactsFiltered = contacts.filter (contact) ->\n contactId = contact.get(\"id\")\n return project.get('members').indexOf(contactId) != -1\n\n project = project.set(\"contacts\", contactsFiltered)\n\n return project\n\n return projects\n\nangular.module(\"taigaCommon\").service(\"tgUserService\", UserService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: xhrError.service.coffee\n###\n\nclass xhrError extends taiga.Service\n @.$inject = [\n \"$q\",\n \"$location\",\n \"$tgNavUrls\"\n ]\n\n constructor: (@q, @location, @navUrls) ->\n\n notFound: () ->\n @location.path(@navUrls.resolve(\"not-found\"))\n @location.replace()\n\n permissionDenied: () ->\n @location.path(@navUrls.resolve(\"permission-denied\"))\n @location.replace()\n\n response: (xhr) ->\n if xhr\n if xhr.status == 404\n @.notFound()\n\n else if xhr.status == 403\n @.permissionDenied()\n\n return @q.reject(xhr)\n\nangular.module(\"taigaCommon\").service(\"tgXhrErrorService\", xhrError)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-attachment.directive.coffee\n###\n\nUserTimelineAttachmentDirective = (template, $compile) ->\n validFileExtensions = [\".jpg\", \".jpeg\", \".bmp\", \".gif\", \".png\"]\n\n isImage = (url) ->\n url = url.toLowerCase()\n\n return _.some validFileExtensions, (extension) ->\n return url.indexOf(extension, url - extension.length) != -1\n\n link = (scope, el) ->\n is_image = isImage(scope.attachment.get('url'))\n\n if is_image\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment-image.html\")\n else\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment.html\")\n\n el.html(templateHtml)\n $compile(el.contents())(scope)\n\n el.find(\"img\").error () -> @.remove()\n\n return {\n link: link\n scope: {\n attachment: \"=tgUserTimelineAttachment\"\n }\n }\n\nUserTimelineAttachmentDirective.$inject = [\n \"$tgTemplate\",\n \"$compile\"\n]\n\nangular.module(\"taigaUserTimeline\")\n .directive(\"tgUserTimelineAttachment\", UserTimelineAttachmentDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-item-title.service.coffee\n###\n\nunslugify = @.taiga.unslugify\n\nclass UserTimelineItemTitle\n @.$inject = [\n \"$translate\"\n ]\n\n _fieldTranslationKey: {\n 'status': 'COMMON.FIELDS.STATUS',\n 'subject': 'COMMON.FIELDS.SUBJECT',\n 'description_diff': 'COMMON.FIELDS.DESCRIPTION',\n 'points': 'COMMON.FIELDS.POINTS',\n 'assigned_to': 'COMMON.FIELDS.ASSIGNED_TO',\n 'severity': 'ISSUES.FIELDS.SEVERITY',\n 'priority': 'ISSUES.FIELDS.PRIORITY',\n 'type': 'ISSUES.FIELDS.TYPE',\n 'is_iocaine': 'TASK.FIELDS.IS_IOCAINE',\n 'is_blocked': 'COMMON.FIELDS.IS_BLOCKED'\n }\n\n _params: {\n username: (timeline, event) ->\n user = timeline.getIn(['data', 'user'])\n\n if user.get('is_profile_visible')\n title_attr = @translate.instant('COMMON.SEE_USER_PROFILE', {username: user.get('username')})\n url = \"user-profile:username=timeline.getIn(['data', 'user', 'username'])\"\n\n return @._getLink(url, user.get('name'), title_attr)\n else\n return @._getUsernameSpan(user.get('name'))\n\n field_name: (timeline, event) ->\n field_name = timeline.getIn(['data', 'value_diff', 'key'])\n\n return @translate.instant(@._fieldTranslationKey[field_name])\n\n project_name: (timeline, event) ->\n url = \"project:project=timeline.getIn(['data', 'project', 'slug'])\"\n\n return @._getLink(url, timeline.getIn([\"data\", \"project\", \"name\"]))\n\n new_value: (timeline, event) ->\n if _.isArray(timeline.getIn([\"data\", \"value_diff\", \"value\"]).toJS())\n value = timeline.getIn([\"data\", \"value_diff\", \"value\"]).get(1)\n\n # assigned to unasigned\n if value == null && timeline.getIn([\"data\", \"value_diff\", \"key\"]) == 'assigned_to'\n value = @translate.instant('ACTIVITY.VALUES.UNASSIGNED')\n\n return value\n else\n return timeline.getIn([\"data\", \"value_diff\", \"value\"]).first().get(1)\n\n sprint_name: (timeline, event) ->\n url = \"project-taskboard:project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['data', 'milestone', 'slug'])\"\n\n return @._getLink(url, timeline.getIn(['data', 'milestone', 'name']))\n\n us_name: (timeline, event) ->\n obj = @._getTimelineObj(timeline, event).get('userstory')\n\n event_us = {obj: 'parent_userstory'}\n url = @._getDetailObjUrl(event_us)\n\n text = '#' + obj.get('ref') + ' ' + obj.get('subject')\n\n return @._getLink(url, text)\n\n obj_name: (timeline, event) ->\n obj = @._getTimelineObj(timeline, event)\n url = @._getDetailObjUrl(event)\n\n if event.obj == 'wikipage'\n text = unslugify(obj.get('slug'))\n else if event.obj == 'milestone'\n text = obj.get('name')\n else\n text = '#' + obj.get('ref') + ' ' + obj.get('subject')\n\n return @._getLink(url, text)\n\n role_name: (timeline, event) ->\n return timeline.getIn(['data', 'value_diff', 'value']).keySeq().first()\n }\n\n constructor: (@translate) ->\n\n\n _translateTitleParams: (param, timeline, event) ->\n return @._params[param].call(this, timeline, event)\n\n _getTimelineObj: (timeline, event) ->\n return timeline.getIn(['data', event.obj])\n\n _getDetailObjUrl: (event) ->\n url = {\n \"issue\": [\"project-issues-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"wikipage\": [\"project-wiki-page\", \":project=timeline.getIn(['data', 'project', 'slug']),slug=timeline.getIn(['obj', 'slug'])\"],\n \"task\": [\"project-tasks-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"parent_userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'userstory', 'ref'])\"],\n \"milestone\": [\"project-taskboard\", \":project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['obj', 'slug'])\"]\n }\n\n return url[event.obj][0] + url[event.obj][1]\n\n _getLink: (url, text, title) ->\n title = title || text\n\n return $('')\n .attr('tg-nav', url)\n .text(text)\n .attr('title', title)\n .prop('outerHTML')\n\n _getUsernameSpan: (text) ->\n title = title || text\n\n return $('')\n .addClass('username')\n .text(text)\n .prop('outerHTML')\n\n _getParams: (timeline, event, timeline_type) ->\n params = {}\n\n timeline_type.translate_params.forEach (param) =>\n params[param] = @._translateTitleParams(param, timeline, event)\n\n return params\n\n getTitle: (timeline, event, type) ->\n return @translate.instant(type.key, @._getParams(timeline, event, type))\n\nangular.module(\"taigaUserTimeline\")\n .service(\"tgUserTimelineItemTitle\", UserTimelineItemTitle)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-item-type.service.coffee\n###\n\ntimelineType = (timeline, event) ->\n types = [\n { # NewMember\n check: (timeline, event) ->\n return event.obj == 'membership'\n key: 'TIMELINE.NEW_MEMBER',\n translate_params: ['project_name']\n member: (timeline) ->\n return Immutable.Map({\n user: timeline.getIn(['data', 'user']),\n role: timeline.getIn(['data', 'role'])\n })\n },\n { # NewProject\n check: (timeline, event) ->\n return event.obj == 'project' && event.type == 'create'\n key: 'TIMELINE.NEW_PROJECT',\n translate_params: ['username', 'project_name'],\n description: (timeline) ->\n return timeline.getIn(['data', 'project', 'description'])\n },\n { # NewAttachment\n check: (timeline, event) ->\n return event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'attachments'\n key: 'TIMELINE.UPLOAD_ATTACHMENT',\n translate_params: ['username', 'obj_name']\n },\n { # NewUs\n check: (timeline, event) ->\n return event.obj == 'userstory' && event.type == 'create'\n key: 'TIMELINE.US_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewIssue\n check: (timeline, event) ->\n return event.obj == 'issue' && event.type == 'create'\n key: 'TIMELINE.ISSUE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewWiki\n check: (timeline, event) ->\n return event.obj == 'wikipage' && event.type == 'create'\n key: 'TIMELINE.WIKI_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewTask\n check: (timeline, event) ->\n return event.obj == 'task' && event.type == 'create' && !timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewTask with US\n check: (timeline, event) ->\n return event.obj == 'task' && event.type == 'create' && timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_CREATED_WITH_US',\n translate_params: ['username', 'project_name', 'obj_name', 'us_name']\n },\n { # NewMilestone\n check: (timeline, event) ->\n return event.obj == 'milestone' && event.type == 'create'\n key: 'TIMELINE.MILESTONE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewUsComment\n check: (timeline, event) ->\n return timeline.getIn(['data', 'comment']) && event.obj == 'userstory'\n key: 'TIMELINE.NEW_COMMENT_US',\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n return $(timeline.getIn(['data', 'comment_html'])).text()\n },\n { # NewIssueComment\n check: (timeline, event) ->\n return timeline.getIn(['data', 'comment']) && event.obj == 'issue'\n key: 'TIMELINE.NEW_COMMENT_ISSUE',\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n return $(timeline.getIn(['data', 'comment_html'])).text()\n },\n { # NewTaskComment\n check: (timeline, event) ->\n return timeline.getIn(['data', 'comment']) && event.obj == 'task'\n key: 'TIMELINE.NEW_COMMENT_TASK'\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n return $(timeline.getIn(['data', 'comment_html'])).text()\n },\n { # UsMove\n check: (timeline, event) ->\n return timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'moveInBacklog' &&\n timeline.hasIn(['data', 'value_diff', 'value', 'backlog_order']) &&\n event.type == 'change'\n key: 'TIMELINE.US_MOVED',\n translate_params: ['username', 'obj_name']\n },\n { # UsToBacklog\n check: (timeline, event) ->\n if timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'moveInBacklog' &&\n event.type == 'change'\n\n return timeline.getIn(['data', 'value_diff', 'value', 'milestone']).get(1) == null\n\n return false\n key: 'TIMELINE.US_REMOVED_FROM_MILESTONE',\n translate_params: ['username', 'obj_name']\n },\n { # UsToMilestone\n check: (timeline, event) ->\n return timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'moveInBacklog' &&\n event.type == 'change'\n key: 'TIMELINE.US_ADDED_MILESTONE',\n translate_params: ['username', 'obj_name', 'sprint_name']\n },\n { # Blocked\n check: (timeline, event) ->\n if timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'blocked' &&\n event.type == 'change'\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) == true\n\n return false\n key: 'TIMELINE.BLOCKED',\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n if timeline.hasIn(['data', 'value_diff', 'value', 'blocked_note_html'])\n return $(timeline.getIn(['data', 'value_diff', 'value', 'blocked_note_html']).get(1)).text()\n else\n return false\n },\n { # UnBlocked\n check: (timeline, event) ->\n if timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'blocked' &&\n event.type == 'change'\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) == false\n\n return false\n key: 'TIMELINE.UNBLOCKED',\n translate_params: ['username', 'obj_name']\n },\n { # MilestoneUpdated\n check: (timeline, event) ->\n return event.obj == 'milestone' && event.type == 'change'\n key: 'TIMELINE.MILESTONE_UPDATED',\n translate_params: ['username', 'obj_name']\n },\n { # WikiUpdated\n check: (timeline, event) ->\n return event.obj == 'wikipage' && event.type == 'change'\n key: 'TIMELINE.WIKI_UPDATED',\n translate_params: ['username', 'obj_name']\n },\n { # UsUpdated points\n check: (timeline, event) ->\n return event.obj == 'userstory' &&\n event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'points'\n key: 'TIMELINE.US_UPDATED_POINTS',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value', 'role_name']\n },\n { # UsUpdated description\n check: (timeline, event) ->\n return event.obj == 'userstory' &&\n event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.US_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n },\n { # UsUpdated general\n check: (timeline, event) ->\n return event.obj == 'userstory' &&\n event.type == 'change'\n key: 'TIMELINE.US_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n },\n { # IssueUpdated description\n check: (timeline, event) ->\n return event.obj == 'issue' &&\n event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.ISSUE_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n },\n { # IssueUpdated general\n check: (timeline, event) ->\n return event.obj == 'issue' &&\n event.type == 'change'\n key: 'TIMELINE.ISSUE_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n },\n { # TaskUpdated description\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n !timeline.getIn(['data', 'task', 'userstory']) &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.TASK_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n },\n { # TaskUpdated with US description\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n timeline.getIn(['data', 'task', 'userstory']) &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.TASK_UPDATED_WITH_US',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name']\n },\n { # TaskUpdated general\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n !timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n },\n { # TaskUpdated with US\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_UPDATED_WITH_US_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name', 'new_value']\n },\n { # New User\n check: (timeline, event) ->\n return event.obj == 'user' && event.type == 'create'\n key: 'TIMELINE.NEW_USER',\n translate_params: ['username']\n }\n ]\n\n return _.find types, (obj) ->\n return obj.check(timeline, event)\n\nclass UserTimelineType\n getType: (timeline, event) -> timelineType(timeline, event)\n\nangular.module(\"taigaUserTimeline\")\n .service(\"tgUserTimelineItemType\", UserTimelineType)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-item.directive.coffee\n###\n\nUserTimelineItemDirective = () ->\n return {\n templateUrl: \"user-timeline/user-timeline-item/user-timeline-item.html\"\n scope: {\n timeline: \"=tgUserTimelineItem\"\n }\n }\n\nangular.module(\"taigaUserTimeline\")\n .directive(\"tgUserTimelineItem\", UserTimelineItemDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-pagination-sequence.service.coffee\n###\n\nUserTimelinePaginationSequence = () ->\n obj = {}\n\n obj.generate = (config) ->\n page = 1\n items = Immutable.List()\n\n config.minItems = config.minItems || 20\n\n next = () ->\n items = Immutable.List()\n return getContent()\n\n getContent = () ->\n config.fetch(page).then (response) ->\n page++\n\n data = response.get(\"data\")\n\n if config.filter\n data = config.filter(data)\n\n if config.map\n data = data.map(config.map)\n\n items = items.concat(data)\n\n if items.size < config.minItems && response.get(\"next\")\n return getContent()\n\n return Immutable.Map({\n items: items,\n next: response.get(\"next\")\n })\n\n return {\n next: () -> next()\n }\n\n return obj\n\nangular.module(\"taigaUserTimeline\").factory(\"tgUserTimelinePaginationSequenceService\", UserTimelinePaginationSequence)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/profile/profile-timeline/profile-timeline.controller.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\n\nclass UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"tgUserTimelineService\"\n ]\n\n constructor: (@userTimelineService) ->\n @.timelineList = Immutable.List()\n @.scrollDisabled = false\n\n @.timeline = null\n\n if @.projectId\n @.timeline = @userTimelineService.getProjectTimeline(@.projectId)\n else if @.currentUser\n @.timeline = @userTimelineService.getProfileTimeline(@.user.get(\"id\"))\n else\n @.timeline = @userTimelineService.getUserTimeline(@.user.get(\"id\"))\n\n loadTimeline: () ->\n @.scrollDisabled = true\n\n return @.timeline\n .next()\n .then (response) =>\n @.timelineList = @.timelineList.concat(response.get(\"items\"))\n\n if response.get(\"next\")\n @.scrollDisabled = false\n\n return @.timelineList\n\nangular.module(\"taigaUserTimeline\")\n .controller(\"UserTimeline\", UserTimelineController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline.directive.coffee\n###\n\nUserTimelineDirective = ->\n return {\n templateUrl: \"user-timeline/user-timeline/user-timeline.html\",\n controller: \"UserTimeline\",\n controllerAs: \"vm\",\n scope: {\n projectId: \"=projectid\",\n user: \"=\",\n currentUser: \"=\"\n },\n bindToController: true\n }\n\nangular.module(\"taigaProfile\").directive(\"tgUserTimeline\", UserTimelineDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline.service.coffee\n###\n\ntaiga = @.taiga\n\nclass UserTimelineService extends taiga.Service\n @.$inject = [\n \"tgResources\",\n \"tgUserTimelinePaginationSequenceService\",\n \"tgUserTimelineItemType\",\n \"tgUserTimelineItemTitle\"\n ]\n\n constructor: (@rs, @userTimelinePaginationSequenceService, @userTimelineItemType, @userTimelineItemTitle) ->\n\n _valid_fields: [\n 'status',\n 'subject',\n 'description_diff',\n 'assigned_to',\n 'points',\n 'severity',\n 'priority',\n 'type',\n 'attachments',\n 'is_iocaine',\n 'content_diff',\n 'name',\n 'estimated_finish',\n 'estimated_start',\n # customs\n 'blocked',\n 'moveInBacklog',\n 'milestone'\n ]\n\n _invalid: [\n {# Items with only invalid fields\n check: (timeline) ->\n value_diff = timeline.get(\"data\").get(\"value_diff\")\n\n if value_diff\n fieldKey = value_diff.get('key')\n\n if @._valid_fields.indexOf(fieldKey) == -1\n return true\n else if fieldKey == 'attachments' &&\n value_diff.get('value').get('new').size == 0\n return true\n\n return false\n },\n {# Deleted\n check: (timeline) ->\n event = timeline.get('event_type').split(\".\")\n return event[2] == 'delete'\n },\n {# Project change\n check: (timeline) ->\n event = timeline.get('event_type').split(\".\")\n return event[1] == 'project' && event[2] == 'change'\n },\n {# Comment deleted\n check: (timeline) ->\n return !!timeline.get(\"data\").get(\"comment_deleted\")\n },\n {# Task milestone\n check: (timeline) ->\n event = timeline.get('event_type').split(\".\")\n value_diff = timeline.get(\"data\").get(\"value_diff\")\n\n if value_diff &&\n event[1] == \"task\" &&\n event[2] == \"change\" &&\n value_diff.get(\"key\") == \"milestone\"\n return timeline.get(\"data\").get(\"value_diff\").get(\"value\")\n\n return false\n }\n ]\n\n _isInValidTimeline: (timeline) ->\n return _.some @._invalid, (invalid) =>\n return invalid.check.call(this, timeline)\n\n _parseEventType: (event_type) ->\n event_type = event_type.split(\".\")\n\n return {\n section: event_type[0],\n obj: event_type[1],\n type: event_type[2]\n }\n\n _getTimelineObject: (timeline, event) ->\n if timeline.get('data').get(event.obj)\n return timeline.get('data').get(event.obj)\n\n _attachExtraInfoToTimelineEntry: (timeline, event, type) ->\n title = @userTimelineItemTitle.getTitle(timeline, event, type)\n\n timeline = timeline.set('title_html', title)\n\n timeline = timeline.set('obj', @._getTimelineObject(timeline, event))\n\n if type.description\n timeline = timeline.set('description', type.description(timeline))\n\n if type.member\n timeline = timeline.set('member', type.member(timeline))\n\n if timeline.getIn(['data', 'value_diff', 'key']) == 'attachments' &&\n timeline.hasIn(['data', 'value_diff', 'value', 'new'])\n timeline = timeline.set('attachments', timeline.getIn(['data', 'value_diff', 'value', 'new']))\n\n return timeline\n\n # - create a entry per every item in the values_diff\n _parseTimeline: (response) ->\n newdata = Immutable.List()\n\n response.get('data').forEach (item) =>\n event = @._parseEventType(item.get('event_type'))\n\n data = item.get('data')\n values_diff = data.get('values_diff')\n\n if values_diff && values_diff.count()\n # blocked/unblocked change must be a single change\n if values_diff.has('is_blocked')\n values_diff = Immutable.Map({'blocked': values_diff})\n\n if values_diff.has('milestone')\n values_diff = Immutable.Map({'moveInBacklog': values_diff})\n else if event.obj == 'milestone'\n values_diff = Immutable.Map({'milestone': values_diff})\n\n values_diff.forEach (value, key) =>\n obj = Immutable.Map({\n key: key,\n value: value\n })\n\n newItem = item.setIn(['data', 'value_diff'], obj)\n newItem = newItem.deleteIn(['data', 'values_diff'])\n newdata = newdata.push(newItem)\n else\n newItem = item.deleteIn(['data', 'values_diff'])\n newdata = newdata.push(newItem)\n\n return response.set('data', newdata)\n\n _addEntyAttributes: (item) ->\n event = @._parseEventType(item.get('event_type'))\n type = @userTimelineItemType.getType(item, event)\n\n return @._attachExtraInfoToTimelineEntry(item, event, type)\n\n getProfileTimeline: (userId) ->\n config = {}\n\n config.fetch = (page) =>\n return @rs.users.getProfileTimeline(userId, page)\n .then (response) =>\n return @._parseTimeline(response)\n\n config.map = (obj) => @._addEntyAttributes(obj)\n\n config.filter = (items) =>\n return items.filterNot (item) => @._isInValidTimeline(item)\n\n return @userTimelinePaginationSequenceService.generate(config)\n\n getUserTimeline: (userId) ->\n config = {}\n\n config.fetch = (page) =>\n return @rs.users.getUserTimeline(userId, page)\n .then (response) =>\n return @._parseTimeline(response)\n\n config.map = (obj) => @._addEntyAttributes(obj)\n\n config.filter = (items) =>\n return items.filterNot (item) => @._isInValidTimeline(item)\n\n return @userTimelinePaginationSequenceService.generate(config)\n\n getProjectTimeline: (projectId) ->\n config = {}\n\n config.fetch = (page) =>\n return @rs.projects.getTimeline(projectId, page)\n .then (response) => return @._parseTimeline(response)\n\n config.map = (obj) => @._addEntyAttributes(obj)\n\n config.filter = (items) =>\n return items.filterNot (item) => @._isInValidTimeline(item)\n\n return @userTimelinePaginationSequenceService.generate(config)\n\nangular.module(\"taigaUserTimeline\").service(\"tgUserTimelineService\", UserTimelineService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog.coffee\n###\n\nmodule = angular.module(\"taigaPlugins\", [\"ngRoute\"])\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["coffee/app.coffee","coffee/classes.coffee","coffee/utils.coffee","coffee/modules/controllerMixins.coffee","coffee/modules/admin.coffee","coffee/modules/auth.coffee","coffee/modules/backlog.coffee","coffee/modules/base.coffee","coffee/modules/common.coffee","coffee/modules/events.coffee","coffee/modules/feedback.coffee","coffee/modules/integrations.coffee","coffee/modules/issues.coffee","coffee/modules/kanban.coffee","coffee/modules/projects.coffee","coffee/modules/related-tasks.coffee","coffee/modules/search.coffee","coffee/modules/taskboard.coffee","coffee/modules/tasks.coffee","coffee/modules/team.coffee","coffee/modules/user-settings.coffee","coffee/modules/userstories.coffee","coffee/modules/wiki.coffee","coffee/modules/common/analytics.coffee","coffee/modules/common/attachments.coffee","coffee/modules/common/bind-scope.coffee","coffee/modules/common/compile-html.directive.coffee","coffee/modules/common/components.coffee","coffee/modules/common/confirm.coffee","coffee/modules/common/custom-field-values.coffee","coffee/modules/common/estimation.coffee","coffee/modules/common/filters.coffee","coffee/modules/common/history.coffee","coffee/modules/common/importer.coffee","coffee/modules/common/lightboxes.coffee","coffee/modules/common/loader.coffee","coffee/modules/common/loading.coffee","coffee/modules/common/popovers.coffee","coffee/modules/common/raven-logger.coffee","coffee/modules/common/tags.coffee","coffee/modules/common/wisiwyg.coffee","coffee/modules/backlog/filters.coffee","coffee/modules/backlog/lightboxes.coffee","coffee/modules/backlog/main.coffee","coffee/modules/backlog/sortable.coffee","coffee/modules/backlog/sprints.coffee","coffee/modules/taskboard/charts.coffee","coffee/modules/taskboard/lightboxes.coffee","coffee/modules/taskboard/main.coffee","coffee/modules/taskboard/sortable.coffee","coffee/modules/kanban/main.coffee","coffee/modules/kanban/sortable.coffee","coffee/modules/issues/detail.coffee","coffee/modules/issues/lightboxes.coffee","coffee/modules/issues/list.coffee","coffee/modules/userstories/detail.coffee","coffee/modules/tasks/detail.coffee","coffee/modules/team/main.coffee","coffee/modules/wiki/main.coffee","coffee/modules/wiki/nav.coffee","coffee/modules/admin/lightboxes.coffee","coffee/modules/admin/memberships.coffee","coffee/modules/admin/nav.coffee","coffee/modules/admin/project-profile.coffee","coffee/modules/admin/project-values.coffee","coffee/modules/admin/roles.coffee","coffee/modules/admin/third-parties.coffee","coffee/modules/projects/lightboxes.coffee","coffee/modules/base/bind.coffee","coffee/modules/base/conf.coffee","coffee/modules/base/contrib.coffee","coffee/modules/base/filters.coffee","coffee/modules/base/http.coffee","coffee/modules/base/location.coffee","coffee/modules/base/model.coffee","coffee/modules/base/navurls.coffee","coffee/modules/base/repository.coffee","coffee/modules/base/storage.coffee","coffee/modules/base/urls.coffee","coffee/modules/resources/attachments.coffee","coffee/modules/resources/custom-attributes-values.coffee","coffee/modules/resources/custom-attributes.coffee","coffee/modules/resources/history.coffee","coffee/modules/resources/invitations.coffee","coffee/modules/resources/issues.coffee","coffee/modules/resources/kanban.coffee","coffee/modules/resources/locales.coffee","coffee/modules/resources/mdrender.coffee","coffee/modules/resources/memberships.coffee","coffee/modules/resources/modules.coffee","coffee/modules/resources/notify-policies.coffee","coffee/modules/resources/projects.coffee","coffee/modules/resources/roles.coffee","coffee/modules/resources/search.coffee","coffee/modules/resources/sprints.coffee","coffee/modules/resources/tasks.coffee","coffee/modules/resources/user-settings.coffee","coffee/modules/resources/users.coffee","coffee/modules/resources/userstories.coffee","coffee/modules/resources/webhooklogs.coffee","coffee/modules/resources/webhooks.coffee","coffee/modules/resources/wiki.coffee","coffee/modules/user-settings/change-password.coffee","coffee/modules/user-settings/lightboxes.coffee","coffee/modules/user-settings/main.coffee","coffee/modules/user-settings/nav.coffee","coffee/modules/user-settings/notifications.coffee","modules/components/components.module.coffee","modules/external-apps/external-apps.module.coffee","modules/home/home.module.coffee","modules/navigation-bar/navigation-bar.module.coffee","modules/profile/profile.module.coffee","modules/projects/projects.module.coffee","modules/resources/resources.module.coffee","modules/user-timeline/user-timeline.module.coffee","modules/components/joy-ride/joy-ride.directive.coffee","modules/components/joy-ride/joy-ride.service.coffee","modules/components/project-menu/project-menu.controller.coffee","modules/components/project-menu/project-menu.directive.coffee","modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee","modules/components/vote-button/vote-button.controller.coffee","modules/components/vote-button/vote-button.directive.coffee","modules/components/watch-button/watch-button.controller.coffee","modules/components/watch-button/watch-button.directive.coffee","modules/external-apps/external-app.controller.coffee","modules/external-apps/external-app.service.coffee","modules/feedback/feedback.service.coffee","modules/home/duties/duty.directive.coffee","modules/home/home.service.coffee","modules/home/projects/home-project-list.directive.coffee","modules/home/working-on/working-on.controller.coffee","modules/home/working-on/working-on.directive.coffee","modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee","modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee","modules/navigation-bar/navigation-bar.directive.coffee","modules/navigation-bar/navigation-bar.service.coffee","modules/profile/profile-bar/profile-bar.controller.coffee","modules/profile/profile-bar/profile-bar.directive.coffee","modules/profile/profile-contacts/profile-contacts.controller.coffee","modules/profile/profile-contacts/profile-contacts.directive.coffee","modules/profile/profile-favs/items/items.directive.coffee","modules/profile/profile-favs/profile-favs.controller.coffee","modules/profile/profile-favs/profile-favs.directive.coffee","modules/profile/profile-hints/profile-hints.controller.coffee","modules/profile/profile-hints/profile-hints.directive.coffee","modules/profile/profile-projects/profile-projects.controller.coffee","modules/profile/profile-projects/profile-projects.directive.coffee","modules/profile/profile-tab/profile-tab.directive.coffee","modules/profile/profile-tabs/profile-tabs.controller.coffee","modules/profile/profile-tabs/profile-tabs.directive.coffee","modules/profile/profile.controller.coffee","modules/projects/components/like-project-button/like-project-button.controller.coffee","modules/projects/components/like-project-button/like-project-button.directive.coffee","modules/projects/components/like-project-button/like-project-button.service.coffee","modules/projects/components/sort-projects.directive.coffee","modules/projects/components/watch-project-button/watch-project-button.controller.coffee","modules/projects/components/watch-project-button/watch-project-button.directive.coffee","modules/projects/components/watch-project-button/watch-project-button.service.coffee","modules/projects/listing/projects-listing.controller.coffee","modules/projects/project/project.controller.coffee","modules/projects/projects.service.coffee","modules/resources/external-apps-resource.service.coffee","modules/resources/issues-resource.service.coffee","modules/resources/projects-resource.service.coffee","modules/resources/resources.coffee","modules/resources/tasks-resource.service.coffee","modules/resources/user-resource.service.coffee","modules/resources/users-resource.service.coffee","modules/resources/userstories-resource.service.coffee","modules/services/app-meta.service.coffee","modules/services/check-permissions.service.coffee","modules/services/current-user.service.coffee","modules/services/lightbox-factory.service.coffee","modules/services/paginate-response.service.coffee","modules/services/project.service.coffee","modules/services/scope-event.service.coffee","modules/services/theme.service.coffee","modules/services/user.service.coffee","modules/services/xhrError.service.coffee","modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee","modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee","modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee","modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee","modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee","modules/user-timeline/user-timeline/user-timeline.controller.coffee","modules/user-timeline/user-timeline/user-timeline.directive.coffee","modules/user-timeline/user-timeline/user-timeline.service.coffee","plugins/main.coffee"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtNA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,OAAA,GAAU,IAAC,CAAC,KAAK,CAAC;;EAClB,QAAA,GAAW,IAAC,CAAC,KAAK,CAAC;;EACnB,KAAA,GAAQ,IAAC,CAAC,KAAK,CAAC;;EAChB,QAAA,GAAW,IAAC,CAAC,KAAK,CAAC;;EACnB,IAAA,GAAO,IAAC,CAAC,KAAK,CAAC;;EAEf,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,eAAf,EAAgC,EAAhC;;EAET,iBAAA,GAAoB,SAAC,gBAAD,EAAmB,KAAnB,EAA0B,QAA1B,EAAoC,QAApC,EAA8C,eAA9C;AAChB,QAAA;IAAA,IAAA,GAAO,SAAC,MAAD,EAAS,GAAT,EAAc,MAAd;AACH,UAAA;MAAA,IAAA,GAAO,GAAG,CAAC,IAAJ,CAAS,MAAT,CAAgB,CAAC,SAAjB,CAAA;MAEP,MAAA,GAAS,QAAA,CAAS,IAAT,EAAe,CAAA,SAAA,KAAA;eAAA,SAAC,KAAD;AACpB,cAAA;UAAA,KAAK,CAAC,cAAN,CAAA;UAEA,IAAG,CAAI,IAAI,CAAC,QAAL,CAAA,CAAP;AACI,mBADJ;;UAGA,cAAA,GAAiB,QAAA,CAAA,CACb,CAAC,MADY,CACL,YADK,CAEb,CAAC,KAFY,CAAA;UAIjB,OAAA,GAAU,KAAK,CAAC,MAAN,CAAa,UAAb,EAAyB,MAAM,CAAC,QAAhC;UAEV,OAAO,CAAC,IAAR,CAAa,SAAC,IAAD;YACT,cAAc,CAAC,MAAf,CAAA;YACA,gBAAgB,CAAC,KAAjB,CAAuB,GAAvB;mBACA,QAAQ,CAAC,MAAT,CAAgB,SAAhB,EAA2B,kCAA3B;UAHS,CAAb;iBAKA,OAAO,CAAC,IAAR,CAAa,IAAb,EAAmB,SAAA;YACf,cAAc,CAAC,MAAf,CAAA;mBACA,QAAQ,CAAC,MAAT,CAAgB,OAAhB;UAFe,CAAnB;QAjBoB;MAAA,CAAA,CAAA,CAAA,IAAA,CAAf;MAqBT,YAAA,GAAe,GAAG,CAAC,IAAJ,CAAS,gBAAT;MAEf,GAAG,CAAC,EAAJ,CAAO,QAAP,EAAiB,MAAjB,EAAyB,MAAzB;MAEA,YAAA,GAAe,SAAA;QACX,MAAM,CAAC,QAAP,GAAkB;QAClB,gBAAgB,CAAC,IAAjB,CAAsB,GAAtB;eACA,GAAG,CAAC,IAAJ,CAAS,UAAT,CAAoB,CAAC,KAArB,CAAA;MAHW;MAKf,MAAM,CAAC,GAAP,CAAW,UAAX,EAAuB,SAAA;eACnB,GAAG,CAAC,GAAJ,CAAA;MADmB,CAAvB;aAGA,YAAA,CAAA;IApCG;IAsCP,SAAA,GAAY;MACR,IAAA,EAAM,IADE;MAER,WAAA,EAAa,+BAFL;MAGR,KAAA,EAAO,EAHC;;AAMZ,WAAO;EA7CS;;EA+CpB,MAAM,CAAC,SAAP,CAAiB,cAAjB,EAAiC,CAAC,iBAAD,EAAoB,SAApB,EAA+B,YAA/B,EAC7B,YAD6B,EACf,mBADe,EACM,iBADN,CAAjC;AA9EA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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xBA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChTA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA,0FAAA;IAAA;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EACV,OAAA,GAAU,IAAC,CAAC,KAAK,CAAC;;EAElB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,aAAf;;EAMT,uBAAA,GAA0B,SAAC,qBAAD,EAAwB,UAAxB,EAAoC,KAApC,EAA2C,QAA3C,EAAqD,SAArD,EAAgE,QAAhE;AAUtB,QAAA;IAAA,IAAA,GAAO,SAAC,MAAD,EAAS,GAAT,EAAc,MAAd,EAAsB,MAAtB;MACH,MAAM,CAAC,MAAP,CAAc,MAAM,CAAC,OAArB,EAA8B,SAAC,EAAD;AAC1B,YAAA;QAAA,IAAG,EAAH;UACI,iBAAA,GAAoB,qBAAqB,CAAC,MAAtB,CAA6B,GAA7B,EAAkC,EAAlC,EAAsC,MAAM,CAAC,OAA7C;UACpB,iBAAiB,CAAC,sBAAlB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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClNA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA,kRAAA;IAAA;;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,KAAA,GAAQ,IAAC,CAAC,KAAK,CAAC;;EAChB,UAAA,GAAa,IAAC,CAAC,KAAK,CAAC;;EACrB,UAAA,GAAa,IAAC,CAAC,KAAK,CAAC;;EACrB,QAAA,GAAW,IAAC,CAAC,KAAK,CAAC;;EACnB,OAAA,GAAU,IAAC,CAAC,KAAK,CAAC;;EAClB,OAAA,GAAU,IAAC,CAAC,KAAK,CAAC;;EAClB,W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K,CAAC,YAAjC,GAAmD,KAAK,CAAC;UACvE,aAAA,GAAgB,KAAK,CAAC;UACtB,YAAA,GAAe,KAAK,CAAC;UACrB,IAAG,aAAA,GAAgB,WAAnB;YACI,uBAAA,GAA0B,WAAA,GAAc,GAAd,GAAoB;YAC9C,sBAAA,GAAyB,YAAA,GAAe,GAAf,GAAqB,cAFlD;WAAA,MAAA;YAII,uBAAA,GAA0B;YAC1B,sBAAA,GAAyB,YAAA,GAAe,GAAf,GAAqB,YALlD;;UAOA,uBAAA,GAA0B,gBAAA,CAAiB,uBAAA,GAA0B,CAA3C;UAC1B,sBAAA,GAAyB,gBAAA,CAAiB,sBAAA,GAAyB,CAA1C;iBACzB,MAAA,CAAO,MAAP,EAAe,GAAf,EAAoB,uBAApB,EAA6C,sBAA7C,EAbJ;;MADuC,CAA3C;aAgBA,MAAM,CAAC,GAAP,CAAW,UAAX,EAAuB,SAAA;eACnB,GAAG,CAAC,GAAJ,CAAA;MADmB,CAAvB;IAnBG;AAsBP,WAAO;MAAC,IAAA,EAAM,IAAP;;EAtCqB;;EAwChC,MAAM,CAAC,SAAP,CAAiB,sBAAjB,EAAyC,CAAC,aAAD,EAAgB,UAAhB,EAA4B,6BAA5B,CAAzC;AAnoCA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzKA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EACV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WAAA,EAAa,yBAFV;MAGH,IAAA,EAAM,IAHH;;EAlBa;;EAwBxB,MAAM,CAAC,SAAP,CAAiB,gBAAjB,EAAmC,CAAC,SAAD,EAAY,YAAZ,EAA0B,aAA1B,EAAyC,cAAzC,EAAyD,YAAzD,EAAuE,YAAvE,EACC,qBADD,CAAnC;;EAQA,aAAA,GAAgB,SAAA;AACZ,WAAO,SAAC,OAAD,EAAU,QAAV,EAAoB,WAApB;AACH,aAAO,CAAC,CAAC,MAAF,CAAS,OAAT,EAAkB,SAAC,CAAD;eAAO,CAAC,CAAI,WAAJ,IAAmB,CAAC,CAAC,IAAF,KAAU,WAAW,CAAC,EAA1C,CAAA,IACA,CAAC,CAAI,QAAJ,IAAgB,CAAC,CAAC,SAAS,CAAC,MAAZ,CAAuB,IAAA,MAAA,CAAO,QAAP,EAAiB,GAAjB,CAAvB,CAAA,IAAiD,CAAlE;MADP,CAAlB;IADJ;EADK;;EAKhB,MAAM,CAAC,MAAP,CAAc,eAAd,EAA+B,aAA/B;AA1PA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtKA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EACV,QAAA,GAAW,IAAC,CAAC,KAAK,CAAC;;EAEnB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,aAAf;;EAET,wBAAA,GAA2B;;EAM3B,sBAAA,GAAyB,SAAC,GAAD,EAAM,UAAN,EAAkB,QAAlB,EAA4B,QAA5B,EAAsC,eAAtC,EAAuD,QAAvD;AACrB,QAAA;IAAA,iBAAA,GAAoB;IAOpB,QAAA,GAAW,CAAC,CAAC,QAAF,CAAW,yoBAAX;IAiBX,IAAA,GAAO,SAAC,MAA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CAAC,GAAJ,CAAA;MADmB,CAAvB;MAGA,MAAM,CAAC,GAAP,CAAW,cAAX,EAA2B,SAAA;eACvB,iBAAA,CAAA;MADuB,CAA3B;aAGA,QAAA,CAAS,MAAT,EAAiB,MAAM,CAAC,OAAxB,EAAiC,iBAAjC;IA5JG;AA8JP,WAAO;MAAC,IAAA,EAAK,IAAN;;EAvMgB;;EAyM3B,MAAM,CAAC,SAAP,CAAiB,mBAAjB,EAAsC,CAAC,YAAD,EAAe,SAAf,EAA0B,YAA1B,EAAwC,UAAxC,EACC,wBADD,CAAtC;AAleA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1sBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA,8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A;AACA;AACA;AACA;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAqBA,KAAA,GAAQ,IAAC,CAAC;;EAEV,gBAAA,GAAmB,SAAC,KAAD;AACf,QAAA;IAAA,IAAA,GAAO,SAAC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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBA,gBAAA,GAAmB,SAAC,KAAD,EAAQ,KAAR,EAAe,KAAf;AACf,QAAA;IAAA,OAAA,GAAU;IAEV,OAAO,CAAC,IAAR,GAAe,SAAC,SAAD;AACX,UAAA;MAAA,MAAA,GAAS;QAAC,OAAA,EAAS,SAAV;;AACT,aAAO,KAAK,CAAC,SAAN,CAAgB,UAAhB,EAA4B,MAA5B;IAFI;IAIf,OAAO,CAAC,IAAR,GAAe,SAAC,SAAD;AACX,UAAA;MAAA,GAAA,GAAM,KAAK,CAAC,OAAN,CAAc,eAAd,EAA+B,SAA/B;AACN,aAAO,KAAK,CAAC,IAAN,CAAW,GAAX;IAFI;AAIf,WAAO,SAAC,QAAD;aACH,QAAQ,CAAC,QAAT,GAAoB;IADjB;EAXQ;;EAenB,MAAA,GAAS,OAAO,CAAC,MAAR,CAAe,gBAAf;;EACT,MAAM,CAAC,OAAP,CAAe,8BAAf,EAA+C,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,gBAAlC,CAA/C;AAnC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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AGD,eAAO,GAHN;;MAKL,IAAG,IAAC,CAAC,OAAO,CAAC,GAAV,CAAc,6BAAd,CAAH;QACI,GAAA,GAAM,IAAC,CAAC,OAAO,CAAC,GAAV,CAAc,MAAd,CAAA,GAAwB,GAAxB,GAA8B,IAAC,CAAC,OAAO,CAAC,GAAV,CAAc,6BAAd,EADxC;OAAA,MAAA;QAGI,GAAA,GAAM,IAAC,CAAC,OAAO,CAAC,GAAV,CAAc,MAAd,EAHV;;AAKA,aAAO,OAAA,GAAU;IApBA;;;;;;EAsBzB,OAAO,CAAC,MAAR,CAAe,iBAAf,CAAiC,CAAC,UAAlC,CAA6C,aAA7C,EAA4D,qBAA5D;AArHA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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CAGd,aAAA,GAAgB,SAAA;aACZ,IAAC,CAAC,aAAF,GAAkB;IADN;;mCAGhB,eAAA,GAAiB,SAAA;AACb,aAAO,IAAC,CAAC;IADI;;;;KAXc,KAAK,CAAC;;EAczC,OAAO,CAAC,MAAR,CAAe,oBAAf,CAAoC,CAAC,OAArC,CAA6C,wBAA7C,EAAuE,oBAAvE;AAjCA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;;;;;;;;;;;;;;;;;;;AAAA;AAAA,MAAA;;EAmBM;I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","file":"app.js","sourcesContent":["###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: app.coffee\n###\n\n@taiga = taiga = {}\n@.taigaContribPlugins = @.taigaContribPlugins or []\n\n# Generic function for generate hash from a arbitrary length\n# collection of parameters.\ntaiga.generateHash = (components=[]) ->\n components = _.map(components, (x) -> JSON.stringify(x))\n return hex_sha1(components.join(\":\"))\n\n\ntaiga.generateUniqueSessionIdentifier = ->\n date = (new Date()).getTime()\n randomNumber = Math.floor(Math.random() * 0x9000000)\n return taiga.generateHash([date, randomNumber])\n\n\ntaiga.sessionId = taiga.generateUniqueSessionIdentifier()\n\n\nconfigure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider,\n $compileProvider, $translateProvider, $animateProvider) ->\n\n $animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/)\n\n # wait until the trasnlation is ready to resolve the page\n originalWhen = $routeProvider.when\n\n $routeProvider.when = (path, route) ->\n route.resolve || (route.resolve = {})\n angular.extend(route.resolve, {\n languageLoad: [\"$q\", \"$translate\", ($q, $translate) ->\n deferred = $q.defer()\n\n $translate().then () -> deferred.resolve()\n\n return deferred.promise\n ]\n })\n\n return originalWhen.call($routeProvider, path, route)\n\n $routeProvider.when(\"/\",\n {\n templateUrl: \"home/home.html\",\n access: {\n requiresLogin: true\n },\n loader: true,\n title: \"HOME.PAGE_TITLE\",\n loader: true,\n description: \"HOME.PAGE_DESCRIPTION\",\n joyride: \"dashboard\"\n }\n )\n\n $routeProvider.when(\"/projects/\",\n {\n templateUrl: \"projects/listing/projects-listing.html\",\n access: {\n requiresLogin: true\n },\n title: \"PROJECTS.PAGE_TITLE\",\n description: \"PROJECTS.PAGE_DESCRIPTION\",\n loader: true,\n controller: \"ProjectsListing\",\n controllerAs: \"vm\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/\",\n {\n templateUrl: \"projects/project/project.html\",\n loader: true,\n controller: \"Project\",\n controllerAs: \"vm\"\n section: \"project-timeline\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/search\",\n {\n templateUrl: \"search/search.html\",\n reloadOnSearch: false,\n section: \"search\",\n loader: true\n }\n )\n\n $routeProvider.when(\"/project/:pslug/backlog\",\n {\n templateUrl: \"backlog/backlog.html\",\n loader: true,\n section: \"backlog\",\n joyride: \"backlog\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/kanban\",\n {\n templateUrl: \"kanban/kanban.html\",\n loader: true,\n section: \"kanban\",\n joyride: \"kanban\"\n }\n )\n\n # Milestone\n $routeProvider.when(\"/project/:pslug/taskboard/:sslug\",\n {\n templateUrl: \"taskboard/taskboard.html\",\n loader: true,\n section: \"backlog\"\n }\n )\n\n # User stories\n $routeProvider.when(\"/project/:pslug/us/:usref\",\n {\n templateUrl: \"us/us-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n }\n )\n\n # Tasks\n $routeProvider.when(\"/project/:pslug/task/:taskref\",\n {\n templateUrl: \"task/task-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n }\n )\n\n # Wiki\n $routeProvider.when(\"/project/:pslug/wiki\",\n {redirectTo: (params) -> \"/project/#{params.pslug}/wiki/home\"}, )\n $routeProvider.when(\"/project/:pslug/wiki/:slug\",\n {\n templateUrl: \"wiki/wiki.html\",\n loader: true,\n section: \"wiki\"\n }\n )\n\n # Team\n $routeProvider.when(\"/project/:pslug/team\",\n {\n templateUrl: \"team/team.html\",\n loader: true,\n section: \"team\"\n }\n )\n\n # Issues\n $routeProvider.when(\"/project/:pslug/issues\",\n {\n templateUrl: \"issue/issues.html\",\n loader: true,\n section: \"issues\"\n }\n )\n $routeProvider.when(\"/project/:pslug/issue/:issueref\",\n {\n templateUrl: \"issue/issues-detail.html\",\n loader: true,\n section: \"issues\"\n }\n )\n\n # Admin - Project Profile\n $routeProvider.when(\"/project/:pslug/admin/project-profile/details\",\n {\n templateUrl: \"admin/admin-project-profile.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/default-values\",\n {\n templateUrl: \"admin/admin-project-default-values.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/modules\",\n {\n templateUrl: \"admin/admin-project-modules.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/export\",\n {\n templateUrl: \"admin/admin-project-export.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-profile/reports\",\n {\n templateUrl: \"admin/admin-project-reports.html\",\n section: \"admin\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/admin/project-values/status\",\n {\n templateUrl: \"admin/admin-project-values-status.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/points\",\n {\n templateUrl: \"admin/admin-project-values-points.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/priorities\",\n {\n templateUrl: \"admin/admin-project-values-priorities.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/severities\",\n {\n templateUrl: \"admin/admin-project-values-severities.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/types\",\n {\n templateUrl: \"admin/admin-project-values-types.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/project-values/custom-fields\",\n {\n templateUrl: \"admin/admin-project-values-custom-fields.html\",\n section: \"admin\"\n }\n )\n\n $routeProvider.when(\"/project/:pslug/admin/memberships\",\n {\n templateUrl: \"admin/admin-memberships.html\",\n section: \"admin\"\n }\n )\n # Admin - Roles\n $routeProvider.when(\"/project/:pslug/admin/roles\",\n {\n templateUrl: \"admin/admin-roles.html\",\n section: \"admin\"\n }\n )\n\n # Admin - Third Parties\n $routeProvider.when(\"/project/:pslug/admin/third-parties/webhooks\",\n {\n templateUrl: \"admin/admin-third-parties-webhooks.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/third-parties/github\",\n {\n templateUrl: \"admin/admin-third-parties-github.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gitlab\",\n {\n templateUrl: \"admin/admin-third-parties-gitlab.html\",\n section: \"admin\"\n }\n )\n $routeProvider.when(\"/project/:pslug/admin/third-parties/bitbucket\",\n {\n templateUrl: \"admin/admin-third-parties-bitbucket.html\",\n section: \"admin\"\n }\n )\n # Admin - Contrib Plugins\n $routeProvider.when(\"/project/:pslug/admin/contrib/:plugin\",\n {templateUrl: \"contrib/main.html\"})\n\n # User settings\n $routeProvider.when(\"/user-settings/user-profile\",\n {templateUrl: \"user/user-profile.html\"})\n $routeProvider.when(\"/user-settings/user-change-password\",\n {templateUrl: \"user/user-change-password.html\"})\n $routeProvider.when(\"/user-settings/mail-notifications\",\n {templateUrl: \"user/mail-notifications.html\"})\n $routeProvider.when(\"/change-email/:email_token\",\n {templateUrl: \"user/change-email.html\"})\n $routeProvider.when(\"/cancel-account/:cancel_token\",\n {templateUrl: \"user/cancel-account.html\"})\n\n # User profile\n $routeProvider.when(\"/profile\",\n {\n templateUrl: \"profile/profile.html\",\n loader: true,\n access: {\n requiresLogin: true\n },\n controller: \"Profile\",\n controllerAs: \"vm\"\n }\n )\n\n $routeProvider.when(\"/profile/:slug\",\n {\n templateUrl: \"profile/profile.html\",\n loader: true,\n controller: \"Profile\",\n controllerAs: \"vm\"\n }\n )\n\n # Auth\n $routeProvider.when(\"/login\",\n {\n templateUrl: \"auth/login.html\",\n title: \"LOGIN.PAGE_TITLE\",\n description: \"LOGIN.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/register\",\n {\n templateUrl: \"auth/register.html\",\n title: \"REGISTER.PAGE_TITLE\",\n description: \"REGISTER.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/forgot-password\",\n {\n templateUrl: \"auth/forgot-password.html\",\n title: \"FORGOT_PASSWORD.PAGE_TITLE\",\n description: \"FORGOT_PASSWORD.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/change-password/:token\",\n {\n templateUrl: \"auth/change-password-from-recovery.html\",\n title: \"CHANGE_PASSWORD.PAGE_TITLE\",\n description: \"CHANGE_PASSWORD.PAGE_TITLE\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/invitation/:token\",\n {\n templateUrl: \"auth/invitation.html\",\n title: \"INVITATION.PAGE_TITLE\",\n description: \"INVITATION.PAGE_DESCRIPTION\",\n disableHeader: true\n }\n )\n $routeProvider.when(\"/external-apps\",\n {\n templateUrl: \"external-apps/external-app.html\",\n title: \"EXTERNAL_APP.PAGE_TITLE\",\n description: \"EXTERNAL_APP.PAGE_DESCRIPTION\",\n controller: \"ExternalApp\",\n controllerAs: \"vm\",\n disableHeader: true,\n mobileViewport: true\n }\n )\n\n # Errors/Exceptions\n $routeProvider.when(\"/error\",\n {templateUrl: \"error/error.html\"})\n $routeProvider.when(\"/not-found\",\n {templateUrl: \"error/not-found.html\"})\n $routeProvider.when(\"/permission-denied\",\n {templateUrl: \"error/permission-denied.html\"})\n\n $routeProvider.otherwise({redirectTo: \"/not-found\"})\n $locationProvider.html5Mode({enabled: true, requireBase: false})\n\n defaultHeaders = {\n \"Content-Type\": \"application/json\"\n \"Accept-Language\": window.taigaConfig.defaultLanguage || \"en\"\n \"X-Session-Id\": taiga.sessionId\n }\n\n $httpProvider.defaults.headers.delete = defaultHeaders\n $httpProvider.defaults.headers.patch = defaultHeaders\n $httpProvider.defaults.headers.post = defaultHeaders\n $httpProvider.defaults.headers.put = defaultHeaders\n $httpProvider.defaults.headers.get = {\n \"X-Session-Id\": taiga.sessionId\n }\n\n $httpProvider.useApplyAsync(true)\n\n $tgEventsProvider.setSessionId(taiga.sessionId)\n\n # Add next param when user try to access to a secction need auth permissions.\n authHttpIntercept = ($q, $location, $navUrls, $lightboxService) ->\n httpResponseError = (response) ->\n if response.status == 0 || response.status == -1\n $lightboxService.closeAll()\n $location.path($navUrls.resolve(\"error\"))\n $location.replace()\n else if response.status == 401 and $location.url().indexOf('/login') == -1\n nextUrl = encodeURIComponent($location.url())\n $location.url($navUrls.resolve(\"login\")).search(\"next=#{nextUrl}\")\n\n return $q.reject(response)\n\n return {\n responseError: httpResponseError\n }\n\n $provide.factory(\"authHttpIntercept\", [\"$q\", \"$location\", \"$tgNavUrls\", \"lightboxService\",\n authHttpIntercept])\n\n $httpProvider.interceptors.push(\"authHttpIntercept\")\n\n\n loaderIntercept = ($q, loaderService) ->\n return {\n request: (config) ->\n loaderService.logRequest()\n\n return config\n\n requestError: (rejection) ->\n loaderService.logResponse()\n\n return $q.reject(rejection)\n\n responseError: (rejection) ->\n loaderService.logResponse()\n\n return $q.reject(rejection)\n\n response: (response) ->\n loaderService.logResponse()\n\n return response\n }\n\n\n $provide.factory(\"loaderIntercept\", [\"$q\", \"tgLoader\", loaderIntercept])\n\n $httpProvider.interceptors.push(\"loaderIntercept\")\n\n # If there is an error in the version throw a notify error.\n # IMPROVEiMENT: Move this version error handler to USs, issues and tasks repository\n versionCheckHttpIntercept = ($q) ->\n httpResponseError = (response) ->\n if response.status == 400 && response.data.version\n # HACK: to prevent circular dependencies with [$tgConfirm, $translate]\n $injector = angular.element(\"body\").injector()\n $injector.invoke([\"$tgConfirm\", \"$translate\", ($confirm, $translate) =>\n versionErrorMsg = $translate.instant(\"ERROR.VERSION_ERROR\")\n $confirm.notify(\"error\", versionErrorMsg, null, 10000)\n ])\n\n return $q.reject(response)\n\n return {responseError: httpResponseError}\n\n $provide.factory(\"versionCheckHttpIntercept\", [\"$q\", versionCheckHttpIntercept])\n\n $httpProvider.interceptors.push(\"versionCheckHttpIntercept\")\n\n window.checksley.updateValidators({\n linewidth: (val, width) ->\n lines = taiga.nl2br(val).split(\"
\")\n\n valid = _.every lines, (line) ->\n line.length < width\n\n return valid\n })\n\n $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false)\n\n if localStorage.userInfo\n userInfo = JSON.parse(localStorage.userInfo)\n\n # i18n\n preferedLangCode = userInfo?.lang || window.taigaConfig.defaultLanguage || \"en\"\n\n $translateProvider\n .useStaticFilesLoader({\n prefix: \"/locales/locale-\",\n suffix: \".json\"\n })\n .addInterpolation('$translateMessageFormatInterpolation')\n .preferredLanguage(preferedLangCode)\n\n $translateProvider.fallbackLanguage(preferedLangCode)\n\n # decoratos\n decorators = _.where(@.taigaContribPlugins, {\"type\": \"decorator\"})\n\n _.each decorators, (decorator) ->\n $provide.decorator decorator.provider, decorator.decorator\n\n # decoratos\n decorators = _.where(@.taigaContribPlugins, {\"type\": \"decorator\"})\n\n _.each decorators, (decorator) ->\n $provide.decorator decorator.provider, decorator.decorator\n\ni18nInit = (lang, $translate) ->\n # i18n - moment.js\n moment.locale(lang)\n\n # i18n - checksley.js\n messages = {\n defaultMessage: $translate.instant(\"COMMON.FORM_ERRORS.DEFAULT_MESSAGE\")\n type: {\n email: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_EMAIL\")\n url: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URL\")\n urlstrict: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URLSTRICT\")\n number: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_NUMBER\")\n digits: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DIGITS\")\n dateIso: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DATEISO\")\n alphanum: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_ALPHANUM\")\n phone: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_PHONE\")\n }\n notnull: $translate.instant(\"COMMON.FORM_ERRORS.NOTNULL\")\n notblank: $translate.instant(\"COMMON.FORM_ERRORS.NOT_BLANK\")\n required: $translate.instant(\"COMMON.FORM_ERRORS.REQUIRED\")\n regexp: $translate.instant(\"COMMON.FORM_ERRORS.REGEXP\")\n min: $translate.instant(\"COMMON.FORM_ERRORS.MIN\")\n max: $translate.instant(\"COMMON.FORM_ERRORS.MAX\")\n range: $translate.instant(\"COMMON.FORM_ERRORS.RANGE\")\n minlength: $translate.instant(\"COMMON.FORM_ERRORS.MIN_LENGTH\")\n maxlength: $translate.instant(\"COMMON.FORM_ERRORS.MAX_LENGTH\")\n rangelength: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_LENGTH\")\n mincheck: $translate.instant(\"COMMON.FORM_ERRORS.MIN_CHECK\")\n maxcheck: $translate.instant(\"COMMON.FORM_ERRORS.MAX_CHECK\")\n rangecheck: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_CHECK\")\n equalto: $translate.instant(\"COMMON.FORM_ERRORS.EQUAL_TO\")\n }\n checksley.updateMessages('default', messages)\n\n\ninit = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $navUrls, appMetaService, projectService, loaderService, navigationBarService) ->\n $log.debug(\"Initialize application\")\n\n # Taiga Plugins\n $rootscope.contribPlugins = @.taigaContribPlugins\n $rootscope.adminPlugins = _.where(@.taigaContribPlugins, {\"type\": \"admin\"})\n\n $rootscope.$on \"$translateChangeEnd\", (e, ctx) ->\n lang = ctx.language\n i18nInit(lang, $translate)\n\n # bluebird\n Promise.setScheduler (cb) ->\n $rootscope.$evalAsync(cb)\n\n # Load user\n if $auth.isAuthenticated()\n $events.setupConnection()\n user = $auth.getUser()\n\n # Analytics\n $analytics.initialize()\n\n # On the first page load the loader is painted in `$routeChangeSuccess`\n # because we need to hide the tg-navigation-bar.\n # In the other cases the loader is in `$routeChangeSuccess`\n # because `location.noreload` prevent to execute this event.\n un = $rootscope.$on '$routeChangeStart', (event, next) ->\n if next.loader\n loaderService.start(true)\n\n un()\n\n $rootscope.$on '$routeChangeSuccess', (event, next) ->\n if next.loader\n loaderService.start(true)\n\n if next.access && next.access.requiresLogin\n if !$auth.isAuthenticated()\n $location.path($navUrls.resolve(\"login\"))\n\n projectService.setSection(next.section)\n\n if next.params.pslug\n projectService.setProjectBySlug(next.params.pslug)\n else\n projectService.cleanProject()\n\n if next.title or next.description\n title = $translate.instant(next.title or \"\")\n description = $translate.instant(next.description or \"\")\n appMetaService.setAll(title, description)\n\n if next.mobileViewport\n appMetaService.addMobileViewport()\n else\n appMetaService.removeMobileViewport()\n\n if next.disableHeader\n navigationBarService.disableHeader()\n else\n navigationBarService.enableHeader()\n\npluginsWithModule = _.filter(@.taigaContribPlugins, (plugin) -> plugin.module)\n\npluginsWithModule = _.filter(@.taigaContribPlugins, (plugin) -> plugin.module)\n\nmodules = [\n # Main Global Modules\n \"taigaBase\",\n \"taigaCommon\",\n \"taigaResources\",\n \"taigaResources2\",\n \"taigaAuth\",\n \"taigaEvents\",\n\n # Specific Modules\n \"taigaHome\",\n \"taigaNavigationBar\",\n \"taigaProjects\",\n \"taigaRelatedTasks\",\n \"taigaBacklog\",\n \"taigaTaskboard\",\n \"taigaKanban\",\n \"taigaIssues\",\n \"taigaUserStories\",\n \"taigaTasks\",\n \"taigaTeam\",\n \"taigaWiki\",\n \"taigaSearch\",\n \"taigaAdmin\",\n \"taigaProject\",\n \"taigaUserSettings\",\n \"taigaFeedback\",\n \"taigaPlugins\",\n \"taigaIntegrations\",\n \"taigaComponents\",\n # new modules\n \"taigaProfile\",\n \"taigaHome\",\n \"taigaUserTimeline\",\n \"taigaExternalApps\",\n\n # template cache\n \"templates\",\n\n # Vendor modules\n \"ngRoute\",\n \"ngAnimate\",\n \"ngAria\",\n \"pascalprecht.translate\",\n \"infinite-scroll\",\n \"tgRepeat\"\n].concat(_.map(pluginsWithModule, (plugin) -> plugin.module))\n\n# Main module definition\nmodule = angular.module(\"taiga\", modules)\n\nmodule.config([\n \"$routeProvider\",\n \"$locationProvider\",\n \"$httpProvider\",\n \"$provide\",\n \"$tgEventsProvider\",\n \"$compileProvider\",\n \"$translateProvider\",\n \"$animateProvider\",\n configure\n])\n\nmodule.run([\n \"$log\",\n \"$rootScope\",\n \"$tgAuth\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"tgProjectService\",\n \"tgLoader\",\n \"tgNavigationBarService\",\n \"$route\",\n init\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: classes.coffee\n###\n\nclass TaigaBase\nclass TaigaService extends TaigaBase\nclass TaigaController extends TaigaBase\n onInitialDataError: (xhr) =>\n if xhr\n if xhr.status == 404\n @location.path(@navUrls.resolve(\"not-found\"))\n @location.replace()\n else if xhr.status == 403\n @location.path(@navUrls.resolve(\"permission-denied\"))\n @location.replace()\n\n return @q.reject(xhr)\n\n@.taiga.Base = TaigaBase\n@.taiga.Service = TaigaService\n@.taiga.Controller = TaigaController\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: utils.coffee\n###\n\nnl2br = (str) =>\n breakTag = '
'\n return (str + '').replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1' + breakTag + '$2')\n\nbindMethods = (object) =>\n dependencies = _.keys(object)\n\n methods = []\n\n _.forIn object, (value, key) =>\n if key not in dependencies\n methods.push(key)\n\n _.bindAll(object, methods)\n\nbindOnce = (scope, attr, continuation) =>\n val = scope.$eval(attr)\n if val != undefined\n return continuation(val)\n\n delBind = null\n delBind = scope.$watch attr, (val) ->\n return if val is undefined\n continuation(val)\n delBind() if delBind\n\n\nmixOf = (base, mixins...) ->\n class Mixed extends base\n\n for mixin in mixins by -1 #earlier mixins override later ones\n for name, method of mixin::\n Mixed::[name] = method\n Mixed\n\n\ntrim = (data, char) ->\n return _.str.trim(data, char)\n\n\nslugify = (data) ->\n return _.str.slugify(data)\n\n\nunslugify = (data) ->\n if data\n return _.str.capitalize(data.replace(/-/g, ' '))\n return data\n\n\ntoggleText = (element, texts) ->\n nextTextPosition = element.data('nextTextPosition')\n nextTextPosition = 0 if not nextTextPosition? or nextTextPosition >= texts.length\n text = texts[nextTextPosition]\n element.data('nextTextPosition', nextTextPosition + 1)\n element.text(text)\n\n\ngroupBy = (coll, pred) ->\n result = {}\n for item in coll\n result[pred(item)] = item\n\n return result\n\n\ntimeout = (wait, continuation) ->\n return window.setTimeout(continuation, wait)\n\n\ncancelTimeout = (timeoutVar) ->\n window.clearTimeout(timeoutVar)\n\n\nscopeDefer = (scope, func) ->\n _.defer =>\n scope.$apply(func)\n\n\ntoString = (value) ->\n if _.isNumber(value)\n return value + \"\"\n else if _.isString(value)\n return value\n else if _.isPlainObject(value)\n return JSON.stringify(value)\n else if _.isUndefined(value)\n return \"\"\n return value.toString()\n\n\njoinStr = (str, coll) ->\n return _.str.join(str, coll)\n\n\ndebounce = (wait, func) ->\n return _.debounce(func, wait, {leading: true, trailing: false})\n\n\ndebounceLeading = (wait, func) ->\n return _.debounce(func, wait, {leading: false, trailing: true})\n\n\nstartswith = (str1, str2) ->\n return _.str.startsWith(str1, str2)\n\n\ntruncate = (str, maxLength, suffix=\"...\") ->\n return str if (typeof str != \"string\") and not (str instanceof String)\n\n out = str.slice(0)\n\n if out.length > maxLength\n out = out.substring(0, maxLength + 1)\n out = out.substring(0, Math.min(out.length, out.lastIndexOf(\" \")))\n out = out + suffix\n\n return out\n\n\nsizeFormat = (input, precision=1) ->\n if isNaN(parseFloat(input)) or not isFinite(input)\n return \"-\"\n\n if input == 0\n return \"0 bytes\"\n\n units = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"]\n number = Math.floor(Math.log(input) / Math.log(1024))\n if number > 5\n number = 5\n size = (input / Math.pow(1024, number)).toFixed(precision)\n return \"#{size} #{units[number]}\"\n\nstripTags = (str, exception) ->\n if exception\n pattern = new RegExp('<(?!' + exception + '\\s*\\/?)[^>]+>', 'gi')\n return String(str).replace(pattern, '')\n else\n return String(str).replace(/<\\/?[^>]+>/g, '')\n\nreplaceTags = (str, tags, replace) ->\n # open tag\n pattern = new RegExp('<(' + tags + ')>', 'gi')\n str = str.replace(pattern, '<' + replace + '>')\n\n # close tag\n pattern = new RegExp('<\\/(' + tags + ')>', 'gi')\n str = str.replace(pattern, '')\n\n return str\n\ndefineImmutableProperty = (obj, name, fn) =>\n Object.defineProperty obj, name, {\n get: () =>\n if !_.isFunction(fn)\n throw \"defineImmutableProperty third param must be a function\"\n\n fn_result = fn()\n if fn_result && _.isObject(fn_result)\n if fn_result.size == undefined\n throw \"defineImmutableProperty must return immutable data\"\n\n return fn_result\n }\n\n_.mixin\n removeKeys: (obj, keys) ->\n _.chain([keys]).flatten().reduce(\n (obj, key) ->\n delete obj[key]; obj\n , obj).value()\n\ntaiga = @.taiga\ntaiga.nl2br = nl2br\ntaiga.bindMethods = bindMethods\ntaiga.bindOnce = bindOnce\ntaiga.mixOf = mixOf\ntaiga.trim = trim\ntaiga.slugify = slugify\ntaiga.unslugify = unslugify\ntaiga.toggleText = toggleText\ntaiga.groupBy = groupBy\ntaiga.timeout = timeout\ntaiga.cancelTimeout = cancelTimeout\ntaiga.scopeDefer = scopeDefer\ntaiga.toString = toString\ntaiga.joinStr = joinStr\ntaiga.truncate = truncate\ntaiga.debounce = debounce\ntaiga.debounceLeading = debounceLeading\ntaiga.startswith = startswith\ntaiga.sizeFormat = sizeFormat\ntaiga.stripTags = stripTags\ntaiga.replaceTags = replaceTags\ntaiga.defineImmutableProperty = defineImmutableProperty\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/controllerMixins.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\njoinStr = @.taiga.joinStr\ntrim = @.taiga.trim\ntoString = @.taiga.toString\n\n\n#############################################################################\n## Page Mixin\n#############################################################################\n\nclass PageMixin\n fillUsersAndRoles: (users, roles) ->\n activeUsers = _.filter(users, (user) => user.is_active)\n @scope.activeUsers = _.sortBy(activeUsers, \"full_name_display\")\n @scope.activeUsersById = groupBy(@scope.activeUsers, (e) -> e.id)\n\n @scope.users = _.sortBy(users, \"full_name_display\")\n @scope.usersById = groupBy(@scope.users, (e) -> e.id)\n\n @scope.roles = _.sortBy(roles, \"order\")\n computableRoles = _(@scope.project.members).map(\"role\").uniq().value()\n @scope.computableRoles = _(roles).filter(\"computable\")\n .filter((x) -> _.contains(computableRoles, x.id))\n .value()\n loadUsersAndRoles: ->\n promise = @q.all([\n @rs.projects.usersList(@scope.projectId),\n @rs.projects.rolesList(@scope.projectId)\n ])\n\n return promise.then (results) =>\n [users, roles] = results\n @.fillUsersAndRoles(users, roles)\n return results\n\ntaiga.PageMixin = PageMixin\n\n\n#############################################################################\n## Filters Mixin\n#############################################################################\n# This mixin requires @location ($tgLocation), and @scope\n\nclass FiltersMixin\n selectFilter: (name, value, load=false) ->\n params = @location.search()\n if params[name] != undefined and name != \"page\"\n existing = _.map(taiga.toString(params[name]).split(\",\"), (x) -> trim(x))\n existing.push(taiga.toString(value))\n existing = _.compact(existing)\n value = joinStr(\",\", _.uniq(existing))\n\n if !@location.isInCurrentRouteParams(name, value)\n location = if load then @location else @location.noreload(@scope)\n location.search(name, value)\n\n replaceFilter: (name, value, load=false) ->\n if !@location.isInCurrentRouteParams(name, value)\n location = if load then @location else @location.noreload(@scope)\n location.search(name, value)\n\n replaceAllFilters: (filters, load=false) ->\n location = if load then @location else @location.noreload(@scope)\n location.search(filters)\n\n unselectFilter: (name, value, load=false) ->\n params = @location.search()\n\n if params[name] is undefined\n return\n\n if value is undefined or value is null\n delete params[name]\n\n parsedValues = _.map(taiga.toString(params[name]).split(\",\"), (x) -> trim(x))\n newValues = _.reject(parsedValues, (x) -> x == taiga.toString(value))\n newValues = _.compact(newValues)\n\n if _.isEmpty(newValues)\n value = null\n else\n value = joinStr(\",\", _.uniq(newValues))\n\n location = if load then @location else @location.noreload(@scope)\n location.search(name, value)\n\ntaiga.FiltersMixin = FiltersMixin\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin.coffee\n###\n\nmodule = angular.module(\"taigaAdmin\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/auth.coffee\n###\n\ntaiga = @.taiga\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaAuth\", [\"taigaResources\"])\n\n#############################################################################\n## Authentication Service\n#############################################################################\n\nclass AuthService extends taiga.Service\n @.$inject = [\"$rootScope\",\n \"$tgStorage\",\n \"$tgModel\",\n \"$tgResources\",\n \"$tgHttp\",\n \"$tgUrls\",\n \"$tgConfig\",\n \"$translate\",\n \"tgCurrentUserService\",\n \"tgThemeService\"]\n\n constructor: (@rootscope, @storage, @model, @rs, @http, @urls, @config, @translate, @currentUserService,\n @themeService) ->\n super()\n\n @._currentTheme = @config.get(\"defaultTheme\") || \"taiga\" # load on index.jade\n\n userModel = @.getUser()\n @.setUserdata(userModel)\n\n setUserdata: (userModel) ->\n if userModel\n @.userData = Immutable.fromJS(userModel.getAttrs())\n @currentUserService.setUser(@.userData)\n else\n @.userData = null\n\n _getUserTheme: ->\n return @rootscope.user?.theme || @config.get(\"defaultTheme\") || \"taiga\"\n\n _setTheme: ->\n newTheme = @._getUserTheme()\n\n if @._currentTheme != newTheme\n @._currentTheme = newTheme\n @themeService.use(@._currentTheme)\n\n _setLocales: ->\n lang = @rootscope.user?.lang || @config.get(\"defaultLanguage\") || \"en\"\n @translate.preferredLanguage(lang) # Needed for calls to the api in the correct language\n @translate.use(lang) # Needed for change the interface in runtime\n\n getUser: ->\n if @rootscope.user\n return @rootscope.user\n\n userData = @storage.get(\"userInfo\")\n if userData\n user = @model.make_model(\"users\", userData)\n @rootscope.user = user\n @._setLocales()\n\n @._setTheme()\n\n return user\n\n return null\n\n setUser: (user) ->\n @rootscope.auth = user\n @storage.set(\"userInfo\", user.getAttrs())\n @rootscope.user = user\n\n @.setUserdata(user)\n\n @._setLocales()\n @._setTheme()\n\n clear: ->\n @rootscope.auth = null\n @rootscope.user = null\n @storage.remove(\"userInfo\")\n\n setToken: (token) ->\n @storage.set(\"token\", token)\n\n getToken: ->\n return @storage.get(\"token\")\n\n removeToken: ->\n @storage.remove(\"token\")\n\n isAuthenticated: ->\n if @.getUser() != null\n return true\n return false\n\n ## Http interface\n\n login: (data, type) ->\n url = @urls.resolve(\"auth\")\n\n data = _.clone(data, false)\n data.type = if type then type else \"normal\"\n\n @.removeToken()\n\n return @http.post(url, data).then (data, status) =>\n user = @model.make_model(\"users\", data.data)\n @.setToken(user.auth_token)\n @.setUser(user)\n return user\n\n logout: ->\n @.removeToken()\n @.clear()\n @currentUserService.removeUser()\n\n @._setTheme()\n @._setLocales()\n\n\n register: (data, type, existing) ->\n url = @urls.resolve(\"auth-register\")\n\n data = _.clone(data, false)\n data.type = if type then type else \"public\"\n if type == \"private\"\n data.existing = if existing then existing else false\n\n @.removeToken()\n\n return @http.post(url, data).then (response) =>\n user = @model.make_model(\"users\", response.data)\n @.setToken(user.auth_token)\n @.setUser(user)\n return user\n\n getInvitation: (token) ->\n return @rs.invitations.get(token)\n\n acceptInvitiationWithNewUser: (data) ->\n return @.register(data, \"private\", false)\n\n acceptInvitiationWithExistingUser: (data) ->\n return @.register(data, \"private\", true)\n\n forgotPassword: (data) ->\n url = @urls.resolve(\"users-password-recovery\")\n data = _.clone(data, false)\n @.removeToken()\n return @http.post(url, data)\n\n changePasswordFromRecovery: (data) ->\n url = @urls.resolve(\"users-change-password-from-recovery\")\n data = _.clone(data, false)\n @.removeToken()\n return @http.post(url, data)\n\n changeEmail: (data) ->\n url = @urls.resolve(\"users-change-email\")\n data = _.clone(data, false)\n return @http.post(url, data)\n\n cancelAccount: (data) ->\n url = @urls.resolve(\"users-cancel-account\")\n data = _.clone(data, false)\n return @http.post(url, data)\n\nmodule.service(\"$tgAuth\", AuthService)\n\n\n#############################################################################\n## Login Directive\n#############################################################################\n\n# Directive that manages the visualization of public register\n# message/link on login page.\n\nPublicRegisterMessageDirective = ($config, $navUrls, templates) ->\n template = templates.get(\"auth/login-text.html\", true)\n\n templateFn = ->\n publicRegisterEnabled = $config.get(\"publicRegisterEnabled\")\n if not publicRegisterEnabled\n return \"\"\n return template({url:$navUrls.resolve(\"register\")})\n\n return {\n restrict: \"AE\"\n scope: {}\n template: templateFn\n }\n\nmodule.directive(\"tgPublicRegisterMessage\", [\"$tgConfig\", \"$tgNavUrls\", \"$tgTemplate\",\n PublicRegisterMessageDirective])\n\n\nLoginDirective = ($auth, $confirm, $location, $config, $routeParams, $navUrls, $events, $translate) ->\n link = ($scope, $el, $attrs) ->\n onSuccess = (response) ->\n if $routeParams['next'] and $routeParams['next'] != $navUrls.resolve(\"login\")\n nextUrl = decodeURIComponent($routeParams['next'])\n else\n nextUrl = $navUrls.resolve(\"home\")\n\n $events.setupConnection()\n $location.url(nextUrl)\n\n onError = (response) ->\n $confirm.notify(\"light-error\", $translate.instant(\"LOGIN_FORM.ERROR_AUTH_INCORRECT\"))\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = new checksley.Form($el.find(\"form.login-form\"))\n if not form.validate()\n return\n\n data = {\n \"username\": $el.find(\"form.login-form input[name=username]\").val(),\n \"password\": $el.find(\"form.login-form input[name=password]\").val()\n }\n\n loginFormType = $config.get(\"loginFormType\", \"normal\")\n\n promise = $auth.login(data, loginFormType)\n return promise.then(onSuccess, onError)\n\n $el.on \"submit\", \"form\", submit\n\n window.prerenderReady = true\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgLogin\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\",\n \"$tgNavUrls\", \"$tgEvents\", \"$translate\", LoginDirective])\n\n\n#############################################################################\n## Register Directive\n#############################################################################\n\nRegisterDirective = ($auth, $confirm, $location, $navUrls, $config, $analytics, $translate) ->\n link = ($scope, $el, $attrs) ->\n if not $config.get(\"publicRegisterEnabled\")\n $location.path($navUrls.resolve(\"not-found\"))\n $location.replace()\n\n $scope.data = {}\n form = $el.find(\"form\").checksley({onlyOneErrorElement: true})\n\n onSuccessSubmit = (response) ->\n $analytics.trackEvent(\"auth\", \"register\", \"user registration\", 1)\n\n $confirm.notify(\"success\", $translate.instant(\"LOGIN_FORM.SUCCESS\"))\n\n $location.path($navUrls.resolve(\"home\"))\n\n onErrorSubmit = (response) ->\n if response.data._error_message\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n $confirm.notify(\"light-error\", text)\n\n form.setErrors(response.data)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.register($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n window.prerenderReady = true\n\n return {link:link}\n\nmodule.directive(\"tgRegister\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\",\n \"$tgAnalytics\", \"$translate\", RegisterDirective])\n\n\n#############################################################################\n## Forgot Password Directive\n#############################################################################\n\nForgotPasswordDirective = ($auth, $confirm, $location, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"FORGOT_PASSWORD_FORM.SUCCESS\")\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"FORGOT_PASSWORD_FORM.ERROR\")\n\n $confirm.notify(\"light-error\", text)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.forgotPassword($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n window.prerenderReady = true\n\n return {link:link}\n\nmodule.directive(\"tgForgotPassword\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$translate\",\n ForgotPasswordDirective])\n\n\n#############################################################################\n## Change Password from Recovery Directive\n#############################################################################\n\nChangePasswordFromRecoveryDirective = ($auth, $confirm, $location, $params, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n\n if $params.token?\n $scope.tokenInParams = true\n $scope.data.token = $params.token\n else\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\")\n $confirm.notify(\"light-error\",text)\n\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.SUCCESS\")\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\")\n $confirm.notify(\"light-error\", text)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.changePasswordFromRecovery($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgChangePasswordFromRecovery\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\",\n \"$tgNavUrls\", \"$translate\",\n ChangePasswordFromRecoveryDirective])\n\n\n#############################################################################\n## Invitation\n#############################################################################\n\nInvitationDirective = ($auth, $confirm, $location, $params, $navUrls, $analytics, $translate) ->\n link = ($scope, $el, $attrs) ->\n token = $params.token\n\n promise = $auth.getInvitation(token)\n promise.then (invitation) ->\n $scope.invitation = invitation\n\n promise.then null, (response) ->\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"INVITATION_LOGIN_FORM.NOT_FOUND\")\n $confirm.notify(\"light-error\", text)\n\n # Login form\n $scope.dataLogin = {token: token}\n loginForm = $el.find(\"form.login-form\").checksley({onlyOneErrorElement: true})\n\n onSuccessSubmitLogin = (response) ->\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with existing user\", 1)\n $location.path($navUrls.resolve(\"project\", {project: $scope.invitation.project_slug}))\n text = $translate.instant(\"INVITATION_LOGIN_FORM.SUCCESS\", {\n \"project_name\": $scope.invitation.project_name\n })\n\n $confirm.notify(\"success\", text)\n\n onErrorSubmitLogin = (response) ->\n text = $translate.instant(\"INVITATION_LOGIN_FORM.ERROR\")\n\n $confirm.notify(\"light-error\", text)\n\n submitLogin = debounce 2000, (event) =>\n event.preventDefault()\n\n if not loginForm.validate()\n return\n\n promise = $auth.acceptInvitiationWithExistingUser($scope.dataLogin)\n promise.then(onSuccessSubmitLogin, onErrorSubmitLogin)\n\n $el.on \"submit\", \"form.login-form\", submitLogin\n $el.on \"click\", \".button-login\", submitLogin\n\n # Register form\n $scope.dataRegister = {token: token}\n registerForm = $el.find(\"form.register-form\").checksley({onlyOneErrorElement: true})\n\n onSuccessSubmitRegister = (response) ->\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with new user\", 1)\n $location.path($navUrls.resolve(\"project\", {project: $scope.invitation.project_slug}))\n $confirm.notify(\"success\", \"You've successfully joined this project\",\n \"Welcome to #{_.escape($scope.invitation.project_name)}\")\n\n onErrorSubmitRegister = (response) ->\n if response.data._error_message\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n $confirm.notify(\"light-error\", text)\n\n registerForm.setErrors(response.data)\n\n submitRegister = debounce 2000, (event) =>\n event.preventDefault()\n\n if not registerForm.validate()\n return\n\n promise = $auth.acceptInvitiationWithNewUser($scope.dataRegister)\n promise.then(onSuccessSubmitRegister, onErrorSubmitRegister)\n\n $el.on \"submit\", \"form.register-form\", submitRegister\n $el.on \"click\", \".button-register\", submitRegister\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgInvitation\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\",\n \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", InvitationDirective])\n\n\n#############################################################################\n## Change Email\n#############################################################################\n\nChangeEmailDirective = ($repo, $model, $auth, $confirm, $location, $params, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n $scope.data.email_token = $params.email_token\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n if $auth.isAuthenticated()\n $repo.queryOne(\"users\", $auth.getUser().id).then (data) =>\n $auth.setUser(data)\n $location.path($navUrls.resolve(\"home\"))\n else\n $location.path($navUrls.resolve(\"login\"))\n\n text = $translate.instant(\"CHANGE_EMAIL_FORM.SUCCESS\")\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n\n $confirm.notify(\"light-error\", text)\n\n submit = ->\n if not form.validate()\n return\n\n promise = $auth.changeEmail($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", (event) ->\n event.preventDefault()\n submit()\n\n $el.on \"click\", \"a.button-change-email\", (event) ->\n event.preventDefault()\n submit()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgChangeEmail\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\",\n \"$routeParams\", \"$tgNavUrls\", \"$translate\", ChangeEmailDirective])\n\n\n#############################################################################\n## Cancel account\n#############################################################################\n\nCancelAccountDirective = ($repo, $model, $auth, $confirm, $location, $params, $navUrls) ->\n link = ($scope, $el, $attrs) ->\n $scope.data = {}\n $scope.data.cancel_token = $params.cancel_token\n form = $el.find(\"form\").checksley()\n\n onSuccessSubmit = (response) ->\n $auth.logout()\n $location.path($navUrls.resolve(\"home\"))\n\n text = $translate.instant(\"CANCEL_ACCOUNT.SUCCESS\")\n\n $confirm.success(text)\n\n onErrorSubmit = (response) ->\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {error: response.data._error_message})\n\n $confirm.notify(\"error\", text)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n promise = $auth.cancelAccount($scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgCancelAccount\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\",\n \"$routeParams\",\"$tgNavUrls\", CancelAccountDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog.coffee\n###\n\nmodule = angular.module(\"taigaBacklog\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base.coffee\n###\n\ntaiga = @.taiga\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaBase\", [])\n\n#############################################################################\n## Main Directive\n#############################################################################\n\nTaigaMainDirective = ($rootscope, $window) ->\n link = ($scope, $el, $attrs) ->\n $window.onresize = () ->\n $rootscope.$broadcast(\"resize\")\n\n return {link:link}\n\nmodule.directive(\"tgMain\", [\"$rootScope\", \"$window\", TaigaMainDirective])\n\n#############################################################################\n## Navigation\n#############################################################################\n\nurls = {\n \"home\": \"/\"\n \"projects\": \"/projects\"\n \"error\": \"/error\"\n \"not-found\": \"/not-found\"\n \"permission-denied\": \"/permission-denied\"\n\n \"login\": \"/login\"\n \"forgot-password\": \"/forgot-password\"\n \"change-password\": \"/change-password/:token\"\n \"change-email\": \"/change-email/:token\"\n \"cancel-account\": \"/cancel-account/:token\"\n \"register\": \"/register\"\n \"invitation\": \"/invitation/:token\"\n \"create-project\": \"/create-project\"\n\n \"profile\": \"/profile\"\n \"user-profile\": \"/profile/:username\"\n\n \"project\": \"/project/:project\"\n \"project-backlog\": \"/project/:project/backlog\"\n \"project-taskboard\": \"/project/:project/taskboard/:sprint\"\n \"project-kanban\": \"/project/:project/kanban\"\n \"project-issues\": \"/project/:project/issues\"\n \"project-search\": \"/project/:project/search\"\n\n \"project-userstories-detail\": \"/project/:project/us/:ref\"\n \"project-tasks-detail\": \"/project/:project/task/:ref\"\n \"project-issues-detail\": \"/project/:project/issue/:ref\"\n\n \"project-wiki\": \"/project/:project/wiki\"\n \"project-wiki-page\": \"/project/:project/wiki/:slug\"\n\n # Team\n \"project-team\": \"/project/:project/team\"\n\n # Admin\n \"project-admin-home\": \"/project/:project/admin/project-profile/details\"\n \"project-admin-project-profile-details\": \"/project/:project/admin/project-profile/details\"\n \"project-admin-project-profile-default-values\": \"/project/:project/admin/project-profile/default-values\"\n \"project-admin-project-profile-modules\": \"/project/:project/admin/project-profile/modules\"\n \"project-admin-project-profile-export\": \"/project/:project/admin/project-profile/export\"\n \"project-admin-project-profile-reports\": \"/project/:project/admin/project-profile/reports\"\n\n \"project-admin-project-values-status\": \"/project/:project/admin/project-values/status\"\n \"project-admin-project-values-points\": \"/project/:project/admin/project-values/points\"\n \"project-admin-project-values-priorities\": \"/project/:project/admin/project-values/priorities\"\n \"project-admin-project-values-severities\": \"/project/:project/admin/project-values/severities\"\n \"project-admin-project-values-types\": \"/project/:project/admin/project-values/types\"\n \"project-admin-project-values-custom-fields\": \"/project/:project/admin/project-values/custom-fields\"\n\n \"project-admin-memberships\": \"/project/:project/admin/memberships\"\n \"project-admin-roles\": \"/project/:project/admin/roles\"\n \"project-admin-third-parties-webhooks\": \"/project/:project/admin/third-parties/webhooks\"\n \"project-admin-third-parties-github\": \"/project/:project/admin/third-parties/github\"\n \"project-admin-third-parties-gitlab\": \"/project/:project/admin/third-parties/gitlab\"\n \"project-admin-third-parties-bitbucket\": \"/project/:project/admin/third-parties/bitbucket\"\n \"project-admin-contrib\": \"/project/:project/admin/contrib/:plugin\"\n\n # User settings\n \"user-settings-user-profile\": \"/user-settings/user-profile\"\n \"user-settings-user-change-password\": \"/user-settings/user-change-password\"\n \"user-settings-user-avatar\": \"/user-settings/user-avatar\"\n \"user-settings-mail-notifications\": \"/user-settings/mail-notifications\"\n\n}\n\ninit = ($log, $navurls) ->\n $log.debug \"Initialize navigation urls\"\n $navurls.update(urls)\n\nmodule.run([\"$log\", \"$tgNavUrls\", init])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common.coffee\n###\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaCommon\", [])\n\n#############################################################################\n## Default datepicker config\n#############################################################################\nDataPickerConfig = ($translate) ->\n return {\n get: () ->\n return {\n i18n: {\n previousMonth: $translate.instant(\"COMMON.PICKERDATE.PREV_MONTH\"),\n nextMonth: $translate.instant(\"COMMON.PICKERDATE.NEXT_MONTH\"),\n months: [\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.JAN\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.FEB\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAR\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.APR\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAY\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUN\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUL\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.AUG\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.SEP\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.OCT\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.NOV\"),\n $translate.instant(\"COMMON.PICKERDATE.MONTHS.DEC\")\n ],\n weekdays: [\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SUN\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.MON\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.TUE\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.WED\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.THU\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.FRI\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SAT\")\n ],\n weekdaysShort: [\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI\"),\n $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT\")\n ]\n },\n isRTL: $translate.instant(\"COMMON.PICKERDATE.IS_RTL\") == \"true\",\n firstDay: parseInt($translate.instant(\"COMMON.PICKERDATE.FIRST_DAY_OF_WEEK\"), 10),\n format: $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n }\n }\n\nmodule.factory(\"tgDatePickerConfigService\", [\"$translate\", DataPickerConfig])\n\n#############################################################################\n## Get the selected text\n#############################################################################\nSelectedText = ($window, $document) ->\n get = () ->\n if $window.getSelection\n return $window.getSelection().toString()\n else if $document.selection\n return $document.selection.createRange().text\n return \"\"\n\n return {get: get}\n\nmodule.factory(\"$selectedText\", [\"$window\", \"$document\", SelectedText])\n\n#############################################################################\n## Permission directive, hide elements when necessary\n#############################################################################\n\nCheckPermissionDirective = ->\n render = ($el, project, permission) ->\n $el.removeClass('hidden') if project.my_permissions.indexOf(permission) > -1\n\n link = ($scope, $el, $attrs) ->\n $el.addClass('hidden')\n permission = $attrs.tgCheckPermission\n\n $scope.$watch \"project\", (project) ->\n render($el, project, permission) if project?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgCheckPermission\", CheckPermissionDirective)\n\n#############################################################################\n## Add class based on permissions\n#############################################################################\n\nClassPermissionDirective = ->\n name = \"tgClassPermission\"\n\n link = ($scope, $el, $attrs) ->\n checkPermissions = (project, className, permission) ->\n negation = permission[0] == \"!\"\n\n permission = permission.slice(1) if negation\n\n if negation && project.my_permissions.indexOf(permission) == -1\n $el.addClass(className)\n else if !negation && project.my_permissions.indexOf(permission) != -1\n $el.addClass(className)\n else\n $el.removeClass(className)\n\n tgClassPermissionWatchAction = (project) ->\n if project\n unbindWatcher()\n\n classes = $scope.$eval($attrs[name])\n\n for className, permission of classes\n checkPermissions(project, className, permission)\n\n\n unbindWatcher = $scope.$watch \"project\", tgClassPermissionWatchAction\n\n return {link:link}\n\nmodule.directive(\"tgClassPermission\", ClassPermissionDirective)\n\n#############################################################################\n## Animation frame service, apply css changes in the next render frame\n#############################################################################\nAnimationFrame = () ->\n animationFrame =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame\n\n performAnimation = (time) =>\n fn = tail.shift()\n fn()\n\n if (tail.length)\n animationFrame(performAnimation)\n\n tail = []\n\n add = () ->\n for fn in arguments\n tail.push(fn)\n\n if tail.length == 1\n animationFrame(performAnimation)\n\n return {add: add}\n\nmodule.factory(\"animationFrame\", AnimationFrame)\n\n#############################################################################\n## Open/close comment\n#############################################################################\n\nToggleCommentDirective = () ->\n link = ($scope, $el, $attrs) ->\n $el.find(\"textarea\").on \"focus\", () ->\n $el.addClass(\"active\")\n\n return {link:link}\n\nmodule.directive(\"tgToggleComment\", ToggleCommentDirective)\n\n\n#############################################################################\n## Get the appropiate section url for a project\n## according to his enabled modules and user permisions\n#############################################################################\n\nProjectUrl = ($navurls) ->\n get = (project) ->\n ctx = {project: project.slug}\n\n if project.is_backlog_activated and project.my_permissions.indexOf(\"view_us\") > -1\n return $navurls.resolve(\"project-backlog\", ctx)\n if project.is_kanban_activated and project.my_permissions.indexOf(\"view_us\") > -1\n return $navurls.resolve(\"project-kanban\", ctx)\n if project.is_wiki_activated and project.my_permissions.indexOf(\"view_wiki_pages\") > -1\n return $navurls.resolve(\"project-wiki\", ctx)\n if project.is_issues_activated and project.my_permissions.indexOf(\"view_issues\") > -1\n return $navurls.resolve(\"project-issues\", ctx)\n\n return $navurls.resolve(\"project\", ctx)\n\n return {get: get}\n\nmodule.factory(\"$projectUrl\", [\"$tgNavUrls\", ProjectUrl])\n\n\n#############################################################################\n## Limite line size in a text area\n#############################################################################\n\nLimitLineLengthDirective = () ->\n link = ($scope, $el, $attrs) ->\n maxColsPerLine = parseInt($el.attr(\"cols\"))\n $el.on \"keyup\", (event) ->\n code = event.keyCode\n lines = $el.val().split(\"\\n\")\n\n _.each lines, (line, index) ->\n lines[index] = line.substring(0, maxColsPerLine - 2)\n\n $el.val(lines.join(\"\\n\"))\n\n return {link:link}\n\nmodule.directive(\"tgLimitLineLength\", LimitLineLengthDirective)\n\n#############################################################################\n## Queue Q promises\n#############################################################################\n\nQqueue = ($q) ->\n deferred = $q.defer()\n deferred.resolve()\n\n lastPromise = deferred.promise\n\n qqueue = {\n bindAdd: (fn) =>\n return (args...) =>\n lastPromise = lastPromise.then () => fn.apply(@, args)\n\n return qqueue\n add: (fn) =>\n if !lastPromise\n lastPromise = fn()\n else\n lastPromise = lastPromise.then(fn)\n\n return qqueue\n }\n\n return qqueue\n\nmodule.factory(\"$tgQqueue\", [\"$q\", Qqueue])\n\n#############################################################################\n## Templates\n#############################################################################\n\nTemplate = ($templateCache) ->\n return {\n get: (name, lodash = false) =>\n tmp = $templateCache.get(name)\n\n if lodash\n tmp = _.template(tmp)\n\n return tmp\n }\n\nmodule.factory(\"$tgTemplate\", [\"$templateCache\", Template])\n\n#############################################################################\n## Permission directive, hide elements when necessary\n#############################################################################\n\nCapslock = ($translate) ->\n link = ($scope, $el, $attrs) ->\n open = false\n\n warningIcon = $('
')\n .addClass('icon')\n .addClass('icon-capslock')\n .attr('title', $translate.instant('COMMON.CAPSLOCK_WARNING'))\n\n hideIcon = () ->\n warningIcon.fadeOut () ->\n open = false\n\n $(this).remove()\n\n showIcon = (e) ->\n return if open\n element = e.currentTarget\n $(element).parent().append(warningIcon)\n $('.icon-capslock').fadeIn()\n\n open = true\n\n $el.on 'blur', (e) ->\n hideIcon()\n\n $el.on 'keyup.capslock, focus', (e) ->\n if $el.val() == $el.val().toLowerCase()\n hideIcon(e)\n else\n showIcon(e)\n\n $scope.$on \"$destroy\", ->\n $el.off('.capslock')\n\n return {link:link}\n\nmodule.directive(\"tgCapslock\", [\"$translate\", Capslock])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/events.coffee\n###\n\ntaiga = @.taiga\nstartswith = @.taiga.startswith\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaEvents\", [])\n\n\nclass EventsService\n constructor: (@win, @log, @config, @auth) ->\n bindMethods(@)\n\n initialize: (sessionId) ->\n @.sessionId = sessionId\n @.subscriptions = {}\n @.connected = false\n @.error = false\n @.pendingMessages = []\n\n if @win.WebSocket is undefined\n @log.info \"WebSockets not supported on your browser\"\n\n setupConnection: ->\n @.stopExistingConnection()\n\n url = @config.get(\"eventsUrl\")\n\n # This allows disable events in case\n # url is not found on the configuration.\n return if not url\n\n # This allows relative urls in configuration.\n if not startswith(url, \"ws:\") and not startswith(url, \"wss:\")\n loc = @win.location\n scheme = if loc.protocol == \"https:\" then \"wss:\" else \"ws:\"\n path = _.str.ltrim(url, \"/\")\n url = \"#{scheme}//#{loc.host}/#{path}\"\n\n @.ws = new @win.WebSocket(url)\n @.ws.addEventListener(\"open\", @.onOpen)\n @.ws.addEventListener(\"message\", @.onMessage)\n @.ws.addEventListener(\"error\", @.onError)\n @.ws.addEventListener(\"close\", @.onClose)\n\n stopExistingConnection: ->\n if @.ws is undefined\n return\n\n @.ws.removeEventListener(\"open\", @.onOpen)\n @.ws.removeEventListener(\"close\", @.onClose)\n @.ws.removeEventListener(\"error\", @.onError)\n @.ws.removeEventListener(\"message\", @.onMessage)\n @.ws.close()\n\n delete @.ws\n\n serialize: (message) ->\n if _.isObject(message)\n return JSON.stringify(message)\n return message\n\n sendMessage: (message) ->\n @.pendingMessages.push(message)\n\n if not @.connected\n return\n\n messages = _.map(@.pendingMessages, @.serialize)\n @.pendingMessages = []\n\n for msg in messages\n @.ws.send(msg)\n\n subscribe: (scope, routingKey, callback) ->\n if @.error\n return\n\n @log.debug(\"Subscribe to: #{routingKey}\")\n subscription = {\n scope: scope,\n routingKey: routingKey,\n callback: _.debounce(callback, 500, {\"leading\": true, \"trailing\": false})\n }\n\n message = {\n \"cmd\": \"subscribe\",\n \"routing_key\": routingKey\n }\n\n @.subscriptions[routingKey] = subscription\n @.sendMessage(message)\n scope.$on(\"$destroy\", => @.unsubscribe(routingKey))\n\n unsubscribe: (routingKey) ->\n if @.error\n return\n\n @log.debug(\"Unsubscribe from: #{routingKey}\")\n\n message = {\n \"cmd\": \"unsubscribe\",\n \"routing_key\": routingKey\n }\n\n @.sendMessage(message)\n\n onOpen: ->\n @.connected = true\n\n @log.debug(\"WebSocket connection opened\")\n token = @auth.getToken()\n\n message = {\n cmd: \"auth\"\n data: {token: token, sessionId: @.sessionId}\n }\n\n @.sendMessage(message)\n\n onMessage: (event) ->\n @.log.debug \"WebSocket message received: #{event.data}\"\n\n data = JSON.parse(event.data)\n routingKey = data.routing_key\n\n if not @.subscriptions[routingKey]?\n return\n\n subscription = @.subscriptions[routingKey]\n subscription.scope.$apply ->\n subscription.callback(data.data)\n\n onError: (error) ->\n @log.error(\"WebSocket error: #{error}\")\n @.error = true\n\n onClose: ->\n @log.debug(\"WebSocket closed.\")\n @.connected = false\n\n\nclass EventsProvider\n setSessionId: (sessionId) ->\n @.sessionId = sessionId\n\n $get: ($win, $log, $conf, $auth) ->\n service = new EventsService($win, $log, $conf, $auth)\n service.initialize(@.sessionId)\n return service\n\n @.prototype.$get.$inject = [\"$window\", \"$log\", \"$tgConfig\", \"$tgAuth\"]\n\nmodule.provider(\"$tgEvents\", EventsProvider)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/feedback.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nmixOf = @.taiga.mixOf\ndebounce = @.taiga.debounce\ntrim = @.taiga.trim\n\nmodule = angular.module(\"taigaFeedback\", [])\n\nFeedbackDirective = ($lightboxService, $repo, $confirm, $loading, feedbackService)->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley()\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.create(\"feedback\", $scope.feedback)\n\n promise.then (data) ->\n currentLoading.finish()\n $lightboxService.close($el)\n $confirm.notify(\"success\", \"\\\\o/ we'll be happy to read your\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n openLightbox = ->\n $scope.feedback = {}\n $lightboxService.open($el)\n $el.find(\"textarea\").focus()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n openLightbox()\n\n directive = {\n link: link,\n templateUrl: \"common/lightbox-feedback.html\"\n scope: {}\n }\n\n return directive\n\nmodule.directive(\"tgLbFeedback\", [\"lightboxService\", \"$tgRepo\", \"$tgConfirm\",\n \"$tgLoading\", \"tgFeedbackService\", FeedbackDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/integrations.coffee\n###\n\nmodule = angular.module(\"taigaIntegrations\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues.coffee\n###\n\nmodule = angular.module(\"taigaIssues\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/kanban.coffee\n###\n\nmodule = angular.module(\"taigaKanban\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/projects.coffee\n###\n\nmodule = angular.module(\"taigaProject\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/related-tasks.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaRelatedTasks\", [])\n\nRelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $template, $translate) ->\n templateView = $template.get(\"task/related-task-row.html\", true)\n templateEdit = $template.get(\"task/related-task-row-edit.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n saveTask = debounce 2000, (task) ->\n task.subject = $el.find('input').val()\n\n currentLoading = $loading()\n .target($el.find('.task-name'))\n .start()\n\n promise = $repo.save(task)\n promise.then =>\n currentLoading.finish()\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"related-tasks:update\")\n\n promise.then null, =>\n currentLoading.finish()\n $el.find('input').val(task.subject)\n $confirm.notify(\"error\")\n return promise\n\n renderEdit = (task) ->\n $el.html($compile(templateEdit({task: task}))($scope))\n\n $el.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13\n saveTask($model.$modelValue).then ->\n renderView($model.$modelValue)\n else if event.keyCode == 27\n renderView($model.$modelValue)\n\n $el.on \"click\", \".icon-floppy\", (event) ->\n saveTask($model.$modelValue).then ->\n renderView($model.$modelValue)\n\n $el.on \"click\", \".cancel-edit\", (event) ->\n renderView($model.$modelValue)\n\n renderView = (task) ->\n $el.off()\n\n perms = {\n modify_task: $scope.project.my_permissions.indexOf(\"modify_task\") != -1\n delete_task: $scope.project.my_permissions.indexOf(\"delete_task\") != -1\n }\n\n $el.html($compile(templateView({task: task, perms: perms}))($scope))\n\n $el.on \"click\", \".icon-edit\", ->\n renderEdit($model.$modelValue)\n $el.find('input').focus().select()\n\n $el.on \"click\", \".delete-task\", (event) ->\n title = $translate.instant(\"TASK.TITLE_DELETE_ACTION\")\n task = $model.$modelValue\n message = task.subject\n\n $confirm.askOnDelete(title, message).then (askResponse) ->\n promise = $repo.remove(task)\n promise.then ->\n askResponse.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"related-tasks:delete\")\n\n promise.then null, ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $scope.$watch $attrs.ngModel, (val) ->\n return if not val\n renderView(val)\n\n $scope.$on \"related-tasks:assigned-to-changed\", ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"related-tasks:status-changed\", ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link, require:\"ngModel\"}\n\nmodule.directive(\"tgRelatedTaskRow\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"$tgTemplate\", \"$translate\", RelatedTaskRowDirective])\n\nRelatedTaskCreateFormDirective = ($repo, $compile, $confirm, $tgmodel, $loading, $analytics, $template) ->\n template = $template.get(\"task/related-task-create-form.html\", true)\n\n newTask = {\n subject: \"\"\n assigned_to: null\n }\n\n link = ($scope, $el, $attrs) ->\n createTask = debounce 2000, (task) ->\n task.subject = $el.find('input').val()\n task.assigned_to = $scope.newTask.assigned_to\n task.status = $scope.newTask.status\n $scope.newTask.status = $scope.project.default_task_status\n $scope.newTask.assigned_to = null\n\n currentLoading = $loading()\n .target($el.find('.task-name'))\n .start()\n\n promise = $repo.create(\"tasks\", task)\n promise.then ->\n $analytics.trackEvent(\"task\", \"create\", \"create task on userstory\", 1)\n currentLoading.finish()\n $scope.$emit(\"related-tasks:add\")\n $confirm.notify(\"success\")\n\n promise.then null, ->\n $el.find('input').val(task.subject)\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n return promise\n\n close = () ->\n $el.off()\n $el.html(\"\")\n\n $scope.newRelatedTaskFormOpen = false\n\n render = ->\n $scope.newRelatedTaskFormOpen = true\n\n $el.html($compile(template())($scope))\n $el.find('input').focus().select()\n $el.addClass('active')\n\n $el.on \"keyup\", \"input\", (event)->\n if event.keyCode == 13\n createTask(newTask).then ->\n render()\n else if event.keyCode == 27\n $scope.$apply () -> close()\n\n $el.on \"click\", \".icon-delete\", (event)->\n $scope.$apply () -> close()\n\n $el.on \"click\", \".icon-floppy\", (event)->\n createTask(newTask).then ->\n close()\n\n taiga.bindOnce $scope, \"us\", (val) ->\n newTask[\"status\"] = $scope.project.default_task_status\n newTask[\"project\"] = $scope.project.id\n newTask[\"user_story\"] = $scope.us.id\n $scope.newTask = $tgmodel.make_model(\"tasks\", newTask)\n $el.html(\"\")\n\n $scope.$on \"related-tasks:show-form\", ->\n render()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\nmodule.directive(\"tgRelatedTaskCreateForm\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgLoading\", \"$tgAnalytics\", \"$tgTemplate\", RelatedTaskCreateFormDirective])\n\nRelatedTaskCreateButtonDirective = ($repo, $compile, $confirm, $tgmodel) ->\n template = _.template(\"\"\"\n \n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n $scope.$watch \"project\", (val) ->\n return if not val\n $el.off()\n if $scope.project.my_permissions.indexOf(\"add_task\") != -1\n $el.html($compile(template())($scope))\n else\n $el.html(\"\")\n\n $el.on \"click\", \".icon\", (event)->\n $scope.$emit(\"related-tasks:add-new-clicked\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\nmodule.directive(\"tgRelatedTaskCreateButton\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", RelatedTaskCreateButtonDirective])\n\nRelatedTasksDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n loadTasks = ->\n return $rs.tasks.list($scope.projectId, null, $scope.usId).then (tasks) =>\n $scope.tasks = _.sortBy(tasks, 'ref')\n return tasks\n\n $scope.$on \"related-tasks:add\", ->\n loadTasks().then ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"related-tasks:delete\", ->\n loadTasks().then ->\n $rootscope.$broadcast(\"related-tasks:update\")\n\n $scope.$on \"related-tasks:add-new-clicked\", ->\n $scope.$broadcast(\"related-tasks:show-form\")\n\n taiga.bindOnce $scope, \"us\", (val) ->\n loadTasks()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\nmodule.directive(\"tgRelatedTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", RelatedTasksDirective])\n\nRelatedTaskAssignedToInlineEditionDirective = ($repo, $rootscope, popoverService) ->\n template = _.template(\"\"\"\n \" alt=\"<%- name %>\"/>\n
<%- name %>
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n updateRelatedTask = (task) ->\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\"}\n member = $scope.usersById[task.assigned_to]\n if member\n ctx.imgurl = member.photo\n ctx.name = member.full_name_display\n\n $el.find(\".avatar\").html(template(ctx))\n $el.find(\".task-assignedto\").attr('title', ctx.name)\n\n $ctrl = $el.controller()\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition)\n notAutoSave = $scope.$eval($attrs.notAutoSave)\n autoSave = !notAutoSave\n\n updateRelatedTask(task)\n\n $el.on \"click\", \".task-assignedto\", (event) ->\n $rootscope.$broadcast(\"assigned-to:add\", task)\n\n taiga.bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_task\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$on \"assigned-to:added\", debounce 2000, (ctx, userId, updatedRelatedTask) =>\n if updatedRelatedTask.id == task.id\n updatedRelatedTask.assigned_to = userId\n if autoSave\n $repo.save(updatedRelatedTask).then ->\n $scope.$emit(\"related-tasks:assigned-to-changed\")\n updateRelatedTask(updatedRelatedTask)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgRelatedTaskAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", RelatedTaskAssignedToInlineEditionDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/search.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nmixOf = @.taiga.mixOf\ndebounceLeading = @.taiga.debounceLeading\ntrim = @.taiga.trim\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaSearch\", [])\n\n\n#############################################################################\n## Search Controller\n#############################################################################\n\nclass SearchController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @q, @location, @appMetaService, @navUrls, @translate) ->\n @scope.sectionName = \"Search\"\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"SEARCH.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"SEARCH.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n # Search input watcher\n @scope.searchTerm = null\n loadSearchData = debounceLeading(100, (t) => @.loadSearchData(t))\n\n bindOnce @scope, \"projectId\", (projectId) =>\n if !@scope.searchResults && @scope.searchTerm\n @.loadSearchData()\n\n @scope.$watch \"searchTerm\", (term) =>\n if term != undefined && @scope.projectId\n @.loadSearchData(term)\n\n loadFilters: ->\n defered = @q.defer()\n defered.resolve()\n return defered.promise\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id)\n @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id)\n @scope.severityById = groupBy(project.severities, (x) -> x.id)\n @scope.priorityById = groupBy(project.priorities, (x) -> x.id)\n @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id)\n return project\n\n loadSearchData: (term = \"\") ->\n @scope.loading = true\n\n @._loadSearchData(term).then (data) =>\n if data\n @scope.searchResults = data\n @scope.loading = false\n\n _loadSearchData: (term = \"\") ->\n @.deferredAbort.resolve() if @.deferredAbort\n\n @.deferredAbort = @q.defer()\n\n @rs.search.do(@scope.projectId, term).then (data) =>\n @.deferredAbort.resolve(data)\n\n return @.deferredAbort.promise\n\n loadInitialData: ->\n return @.loadProject().then (project) =>\n @scope.projectId = project.id\n @.fillUsersAndRoles(project.members, project.roles)\n\nmodule.controller(\"SearchController\", SearchController)\n\n\n#############################################################################\n## Search box directive\n#############################################################################\n\nSearchBoxDirective = (projectService, $lightboxService, $navurls, $location, $route)->\n link = ($scope, $el, $attrs) ->\n project = null\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n text = $el.find(\"#search-text\").val()\n\n url = $navurls.resolve(\"project-search\", {project: project.get(\"slug\")})\n\n $scope.$apply ->\n $lightboxService.close($el)\n\n $location.path(url)\n $location.search(\"text\", text).path(url)\n $route.reload()\n\n\n openLightbox = () ->\n project = projectService.project\n\n $lightboxService.open($el).then () ->\n $el.find(\"#search-text\").focus()\n\n $el.on \"submit\", \"form\", submit\n\n openLightbox()\n\n return {\n templateUrl: \"search/lightbox-search.html\",\n link:link\n }\n\nSearchBoxDirective.$inject = [\n \"tgProjectService\",\n \"lightboxService\",\n \"$tgNavUrls\",\n \"$tgLocation\",\n \"$route\"\n]\n\nmodule.directive(\"tgSearchBox\", SearchBoxDirective)\n\n\n#############################################################################\n## Search Directive\n#############################################################################\n\nSearchDirective = ($log, $compile, $templatecache, $routeparams, $location) ->\n linkTable = ($scope, $el, $attrs, $ctrl) ->\n applyAutoTab = true\n activeSectionName = \"userstories\"\n tabsDom = $el.find(\"section.search-filter\")\n lastSearchResults = null\n\n getActiveSection = (data) ->\n maxVal = 0\n selectedSection = {}\n selectedSection.name = \"userstories\"\n selectedSection.value = []\n\n if !applyAutoTab\n selectedSection.name = activeSectionName\n selectedSection.value = data[activeSectionName]\n\n return selectedSection\n\n if data\n for name in [\"userstories\", \"issues\", \"tasks\", \"wikipages\"]\n value = data[name]\n\n if value.length > maxVal\n maxVal = value.length\n selectedSection.name = name\n selectedSection.value = value\n break;\n\n if maxVal == 0\n return selectedSection\n\n return selectedSection\n\n renderFilterTabs = (data) ->\n for name, value of data\n continue if name == \"count\"\n tabsDom.find(\"li.#{name} .num\").html(value.length)\n\n markSectionTabActive = (section) ->\n # Mark as active the item with max amount of results\n tabsDom.find(\"a.active\").removeClass(\"active\")\n tabsDom.find(\"li.#{section.name} a\").addClass(\"active\")\n\n applyAutoTab = false\n activeSectionName = section.name\n\n templates = {\n issues: $templatecache.get(\"search-issues\")\n tasks: $templatecache.get(\"search-tasks\")\n userstories: $templatecache.get(\"search-userstories\")\n wikipages: $templatecache.get(\"search-wikipages\")\n }\n\n renderTableContent = (section) ->\n oldElements = $el.find(\".search-result-table\").children()\n oldScope = oldElements.scope()\n\n if oldScope\n oldScope.$destroy()\n oldElements.remove()\n\n scope = $scope.$new()\n scope[section.name] = section.value\n\n template = angular.element.parseHTML(trim(templates[section.name]))\n element = $compile(template)(scope)\n $el.find(\".search-result-table\").html(element)\n\n $scope.$watch \"searchResults\", (data) ->\n lastSearchResults = data\n\n return if !lastSearchResults\n\n activeSection = getActiveSection(data)\n\n renderFilterTabs(data)\n\n renderTableContent(activeSection)\n markSectionTabActive(activeSection)\n\n $scope.$watch \"searchTerm\", (searchTerm) ->\n $location.search(\"text\", searchTerm) if searchTerm != undefined\n\n $el.on \"click\", \".search-filter li > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n sectionName = target.parent().data(\"name\")\n sectionData = if !lastSearchResults then [] else lastSearchResults[sectionName]\n\n section = {\n name: sectionName,\n value: sectionData\n }\n\n $scope.$apply ->\n renderTableContent(section)\n markSectionTabActive(section)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n linkTable($scope, $el, $attrs, $ctrl)\n\n searchText = $routeparams.text\n $scope.$watch \"projectId\", (projectId) ->\n $scope.searchTerm = searchText if projectId?\n\n return {link:link}\n\nmodule.directive(\"tgSearch\", [\"$log\", \"$compile\", \"$templateCache\", \"$routeParams\", \"$tgLocation\",\n SearchDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard.coffee\n###\n\nmodule = angular.module(\"taigaTaskboard\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/tasks.coffee\n###\n\nmodule = angular.module(\"taigaTasks\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/team.coffee\n###\n\nmodule = angular.module(\"taigaTeam\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings.coffee\n###\n\nmodule = angular.module(\"taigaUserSettings\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/userstories.coffee\n###\n\nmodule = angular.module(\"taigaUserStories\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/wiki.coffee\n###\n\nmodule = angular.module(\"taigaWiki\", [])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/analytics.coffee\n###\n\ntaiga = @.taiga\nmodule = angular.module(\"taigaCommon\")\n\n\nclass AnalyticsService extends taiga.Service\n @.$inject = [\"$rootScope\", \"$log\", \"$tgConfig\", \"$window\", \"$document\", \"$location\"]\n\n constructor: (@rootscope, @log, @config, @win, @doc, @location) ->\n @.initialized = false\n\n conf = @config.get(\"analytics\", {})\n\n @.accountId = conf.accountId\n @.pageEvent = conf.pageEvent or \"$routeChangeSuccess\"\n @.trackRoutes = conf.trackRoutes or true\n @.ignoreFirstPageLoad = conf.ignoreFirstPageLoad or false\n\n initialize: ->\n if not @.accountId\n @log.debug \"Analytics: no acount id provided. Disabling.\"\n return\n\n @.injectAnalytics()\n\n @win.ga(\"create\", @.accountId, \"auto\")\n @win.ga(\"require\", \"displayfeatures\")\n\n if @.trackRoutes and (not @.ignoreFirstPageLoad)\n @win.ga(\"send\", \"pageview\", @.getUrl())\n\n # activates page tracking\n if @.trackRoutes\n @rootscope.$on @.pageEvent, =>\n @.trackPage(@.getUrl(), \"Taiga\")\n\n @.initialized = true\n\n getUrl: ->\n return @location.path()\n\n injectAnalytics: ->\n fn = `(function(i,s,o,g,r,a,m){i[\"GoogleAnalyticsObject\"]=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m);})`\n fn(window, document, \"script\", \"//www.google-analytics.com/analytics.js\", \"ga\")\n\n trackPage: (url, title) ->\n return if not @.initialized\n return if not @win.ga\n\n title = title or @doc[0].title\n @win.ga(\"send\", \"pageview\", {\n \"page\": url,\n \"title\": title\n })\n\n trackEvent: (category, action, label, value) ->\n return if not @.initialized\n return if not @win.ga\n\n @win.ga(\"send\", \"event\", category, action, label, value)\n\n\nmodule.service(\"$tgAnalytics\", AnalyticsService)\n\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/attachments.coffee\n###\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\nbindOnce = @.taiga.bindOnce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaCommon\")\n\n\nclass AttachmentsController extends taiga.Controller\n @.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\", \"$translate\"]\n\n constructor: (@scope, @rootscope, @repo, @rs, @confirm, @q, @translate) ->\n bindMethods(@)\n @.type = null\n @.objectId = null\n @.projectId = null\n\n @.uploadingAttachments = []\n @.attachments = []\n @.attachmentsCount = 0\n @.deprecatedAttachmentsCount = 0\n @.showDeprecated = false\n\n initialize: (type, objectId) ->\n @.type = type\n @.objectId = objectId\n @.projectId = @scope.projectId\n\n loadAttachments: ->\n return @.attachments if not @.objectId\n\n urlname = \"attachments/#{@.type}\"\n\n return @rs.attachments.list(urlname, @.objectId, @.projectId).then (attachments) =>\n @.attachments = _.sortBy(attachments, \"order\")\n @.updateCounters()\n return attachments\n\n updateCounters: ->\n @.attachmentsCount = @.attachments.length\n @.deprecatedAttachmentsCount = _.filter(@.attachments, {is_deprecated: true}).length\n\n _createAttachment: (attachment) ->\n urlName = \"attachments/#{@.type}\"\n\n promise = @rs.attachments.create(urlName, @.projectId, @.objectId, attachment)\n promise = promise.then (data) =>\n data.isCreatedRightNow = true\n\n index = @.uploadingAttachments.indexOf(attachment)\n @.uploadingAttachments.splice(index, 1)\n @.attachments.push(data)\n @rootscope.$broadcast(\"attachment:create\")\n\n promise = promise.then null, (data) =>\n @scope.$emit(\"attachments:size-error\") if data.status == 413\n\n index = @.uploadingAttachments.indexOf(attachment)\n @.uploadingAttachments.splice(index, 1)\n\n message = @translate.instant(\"ATTACHMENT.ERROR_UPLOAD_ATTACHMENT\", {\n fileName: attachment.name, errorMessage: data.data._error_message})\n @confirm.notify(\"error\", message)\n return @q.reject(data)\n\n return promise\n\n # Create attachments in bulk\n createAttachments: (attachments) ->\n promises = _.map(attachments, (x) => @._createAttachment(x))\n return @q.all(promises).then =>\n @.updateCounters()\n\n # Add uploading attachment tracking.\n addUploadingAttachments: (attachments) ->\n @.uploadingAttachments = _.union(@.uploadingAttachments, attachments)\n\n # Change order of attachment in a ordered list.\n # This function is mainly executed after sortable ends.\n reorderAttachment: (attachment, newIndex) ->\n oldIndex = @.attachments.indexOf(attachment)\n return if oldIndex == newIndex\n\n @.attachments.splice(oldIndex, 1)\n @.attachments.splice(newIndex, 0, attachment)\n\n _.each(@.attachments, (x,i) -> x.order = i+1)\n\n # Persist one concrete attachment.\n # This function is mainly used when user clicks\n # to save button for save one unique attachment.\n updateAttachment: (attachment) ->\n onSuccess = =>\n @.updateCounters()\n @rootscope.$broadcast(\"attachment:edit\")\n\n onError = (response) =>\n $scope.$emit(\"attachments:size-error\") if response.status == 413\n @confirm.notify(\"error\")\n return @q.reject()\n\n return @repo.save(attachment).then(onSuccess, onError)\n\n # Persist all pending modifications on attachments.\n # This function is used mainly for persist the order\n # after sorting.\n saveAttachments: ->\n return @repo.saveAll(@.attachments).then null, =>\n for item in @.attachments\n item.revert()\n @.attachments = _.sortBy(@.attachments, \"order\")\n\n # Remove one concrete attachment.\n removeAttachment: (attachment) ->\n title = @translate.instant(\"ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT\")\n message = @translate.instant(\"ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT\", {fileName: attachment.name})\n\n return @confirm.askOnDelete(title, message).then (askResponse) =>\n onSuccess = =>\n askResponse.finish()\n index = @.attachments.indexOf(attachment)\n @.attachments.splice(index, 1)\n @.updateCounters()\n @rootscope.$broadcast(\"attachment:delete\")\n\n onError = =>\n askResponse.finish(false)\n message = @translate.instant(\"ATTACHMENT.ERROR_DELETE_ATTACHMENT\", {errorMessage: message})\n @confirm.notify(\"error\", null, message)\n return @q.reject()\n\n return @repo.remove(attachment).then(onSuccess, onError)\n\n # Function used in template for filter visible attachments\n filterAttachments: (item) ->\n if @.showDeprecated\n return true\n return not item.is_deprecated\n\n\nAttachmentsDirective = ($config, $confirm, $templates, $translate) ->\n template = $templates.get(\"attachment/attachments.html\", true)\n\n link = ($scope, $el, $attrs, $ctrls) ->\n $ctrl = $ctrls[0]\n $model = $ctrls[1]\n\n bindOnce $scope, $attrs.ngModel, (value) ->\n $ctrl.initialize($attrs.type, value.id)\n $ctrl.loadAttachments()\n\n tdom = $el.find(\"div.attachment-body.sortable\")\n tdom.sortable({\n items: \"div.single-attachment\"\n handle: \"a.settings.icon.icon-drag-v\"\n containment: \".attachments\"\n dropOnEmpty: true\n scroll: false\n tolerance: \"pointer\"\n placeholder: \"sortable-placeholder single-attachment\"\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n attachment = ui.item.scope().attach\n newIndex = ui.item.index()\n\n $ctrl.reorderAttachment(attachment, newIndex)\n $ctrl.saveAttachments().then ->\n $scope.$emit(\"attachment:edit\")\n\n showSizeInfo = ->\n $el.find(\".size-info\").removeClass(\"hidden\")\n\n $scope.$on \"attachments:size-error\", ->\n showSizeInfo()\n\n $el.on \"change\", \".attachments-header input\", (event) ->\n files = _.toArray(event.target.files)\n\n return if files.length < 1\n\n $scope.$apply ->\n $ctrl.addUploadingAttachments(files)\n $ctrl.createAttachments(files)\n\n $el.on \"click\", \".more-attachments\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n $scope.$apply ->\n $ctrl.showDeprecated = not $ctrl.showDeprecated\n\n target.find(\"span.text\").addClass(\"hidden\")\n if $ctrl.showDeprecated\n target.find(\"span[data-type=hide]\").removeClass(\"hidden\")\n target.find(\"more-attachments-num\").addClass(\"hidden\")\n else\n target.find(\"span[data-type=show]\").removeClass(\"hidden\")\n target.find(\"more-attachments-num\").removeClass(\"hidden\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n templateFn = ($el, $attrs) ->\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n maxFileSize = sizeFormat(maxFileSize) if maxFileSize\n maxFileSizeMsg = if maxFileSize then $translate.instant(\"ATTACHMENT.MAX_UPLOAD_SIZE\", {maxFileSize: maxFileSize}) else \"\"\n ctx = {\n type: $attrs.type\n maxFileSize: maxFileSize\n maxFileSizeMsg: maxFileSizeMsg\n }\n return template(ctx)\n\n return {\n require: [\"tgAttachments\", \"ngModel\"]\n controller: AttachmentsController\n controllerAs: \"ctrl\"\n restrict: \"AE\"\n scope: true\n link: link\n template: templateFn\n }\n\nmodule.directive(\"tgAttachments\", [\"$tgConfig\", \"$tgConfirm\", \"$tgTemplate\", \"$translate\", AttachmentsDirective])\n\n\nAttachmentDirective = ($template, $compile, $translate, $rootScope) ->\n template = $template.get(\"attachment/attachment.html\", true)\n templateEdit = $template.get(\"attachment/attachment-edit.html\", true)\n\n link = ($scope, $el, $attrs, $ctrl) ->\n render = (attachment, edit=false) ->\n permissions = $scope.project.my_permissions\n modifyPermission = permissions.indexOf(\"modify_#{$ctrl.type}\") > -1\n\n ctx = {\n id: attachment.id\n name: attachment.name\n title : $translate.instant(\"ATTACHMENT.TITLE\", {\n fileName: attachment.name,\n date: moment(attachment.created_date).format($translate.instant(\"ATTACHMENT.DATE\"))})\n url: attachment.url\n size: sizeFormat(attachment.size)\n description: attachment.description\n isDeprecated: attachment.is_deprecated\n modifyPermission: modifyPermission\n }\n\n if edit\n html = $compile(templateEdit(ctx))($scope)\n else\n html = $compile(template(ctx))($scope)\n\n $el.html(html)\n\n if attachment.is_deprecated\n $el.addClass(\"deprecated\")\n $el.find(\"input:checkbox\").prop('checked', true)\n else\n $el.removeClass(\"deprecated\")\n\n saveAttachment = ->\n attachment.description = $el.find(\"input[name='description']\").val()\n attachment.is_deprecated = $el.find(\"input[name='is-deprecated']\").prop(\"checked\")\n attachment.isCreatedRightNow = false\n\n $scope.$apply ->\n $ctrl.updateAttachment(attachment).then ->\n render(attachment, false)\n\n ## Actions (on edit mode)\n $el.on \"click\", \"a.editable-settings.icon-floppy\", (event) ->\n event.preventDefault()\n saveAttachment()\n\n $el.on \"keyup\", \"input[name=description]\", (event) ->\n if event.keyCode == 13\n saveAttachment()\n else if event.keyCode == 27\n $scope.$apply -> render(attachment, false)\n\n $el.on \"click\", \"a.editable-settings.icon-delete\", (event) ->\n event.preventDefault()\n render(attachment, false)\n\n ## Actions (on view mode)\n $el.on \"click\", \"a.settings.icon-edit\", (event) ->\n event.preventDefault()\n render(attachment, true)\n $el.find(\"input[name='description']\").focus().select()\n\n $el.on \"click\", \"a.settings.icon-delete\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $ctrl.removeAttachment(attachment)\n\n $el.on \"click\", \"div.attachment-name a\", (event) ->\n if null != attachment.name.match(/\\.(jpe?g|png|gif|gifv|webm)/i)\n event.preventDefault()\n $scope.$apply ->\n $rootScope.$broadcast(\"attachment:preview\", attachment)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n # Bootstrap\n attachment = $scope.$eval($attrs.tgAttachment)\n render(attachment, attachment.isCreatedRightNow)\n if attachment.isCreatedRightNow\n $el.find(\"input[name='description']\").focus().select()\n\n return {\n link: link\n require: \"^tgAttachments\"\n restrict: \"AE\"\n }\n\nmodule.directive(\"tgAttachment\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$rootScope\", AttachmentDirective])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: bind-scope.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\nBindScope = (config) ->\n if !config.debugInfo\n jQuery.fn.scope = () -> this.data('scope')\n\n link = ($scope, $el) ->\n if !config.debugInfo\n $el\n .data('scope', $scope)\n .addClass('tg-scope')\n\n return {link: link}\n\nmodule.directive(\"tgBindScope\", [\"$tgConfig\", BindScope])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: compile-html.directive.coffee\n###\n\nCompileHtmlDirective = ($compile) ->\n link = (scope, element, attrs) ->\n scope.$watch attrs.tgCompileHtml, (newValue, oldValue) ->\n element.html(newValue)\n $compile(element.contents())(scope)\n\n return {\n link: link\n }\n\nCompileHtmlDirective.$inject = [\"$compile\"]\n\nangular.module(\"taigaCommon\").directive(\"tgCompileHtml\", CompileHtmlDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/components.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaCommon\")\n\n\n#############################################################################\n## Date Range Directive (used mainly for sprint date range)\n#############################################################################\n\nDateRangeDirective = ($translate) ->\n renderRange = ($el, first, second) ->\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\")\n initDate = moment(first).format(prettyDate)\n endDate = moment(second).format(prettyDate)\n $el.html(\"#{initDate}-#{endDate}\")\n\n link = ($scope, $el, $attrs) ->\n [first, second] = $attrs.tgDateRange.split(\",\")\n\n bindOnce $scope, first, (valFirst) ->\n bindOnce $scope, second, (valSecond) ->\n renderRange($el, valFirst, valSecond)\n\n return {link:link}\n\nmodule.directive(\"tgDateRange\", [\"$translate\", DateRangeDirective])\n\n\n#############################################################################\n## Date Selector Directive (using pikaday)\n#############################################################################\n\nDateSelectorDirective = ($rootscope, datePickerConfigService) ->\n link = ($scope, $el, $attrs, $model) ->\n selectedDate = null\n\n initialize = () ->\n datePickerConfig = datePickerConfigService.get()\n\n _.merge(datePickerConfig, {\n field: $el[0]\n onSelect: (date) =>\n selectedDate = date\n onOpen: =>\n $el.picker.setDate(selectedDate) if selectedDate?\n })\n\n $el.picker = new Pikaday(datePickerConfig)\n\n unbind = $rootscope.$on \"$translateChangeEnd\", (ctx) => initialize()\n\n $scope.$watch $attrs.ngModel, (val) ->\n initialize() if val? and not $el.picker\n $el.picker.setDate(val) if val?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n unbind()\n\n return {\n link: link\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgDateSelector\", [\"$rootScope\", \"tgDatePickerConfigService\", DateSelectorDirective])\n\n\n#############################################################################\n## Sprint Progress Bar Directive\n#############################################################################\n\nSprintProgressBarDirective = ->\n renderProgress = ($el, percentage, visual_percentage) ->\n if $el.hasClass(\".current-progress\")\n $el.css(\"width\", \"#{percentage}%\")\n else\n $el.find(\".current-progress\").css(\"width\", \"#{visual_percentage}%\")\n $el.find(\".number\").html(\"#{percentage} %\")\n\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgSprintProgressbar, (sprint) ->\n closedPoints = sprint.closed_points\n totalPoints = sprint.total_points\n percentage = 0\n percentage = Math.round(100 * (closedPoints/totalPoints)) if totalPoints != 0\n visual_percentage = 0\n #Visual hack for .current-progress bar\n visual_percentage = Math.round(98 * (closedPoints/totalPoints)) if totalPoints != 0\n\n renderProgress($el, percentage, visual_percentage)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgSprintProgressbar\", SprintProgressBarDirective)\n\n\n#############################################################################\n## Created-by display directive\n#############################################################################\n\nCreatedByDisplayDirective = ($template, $compile, $translate, $navUrls)->\n # Display the owner information (full name and photo) and the date of\n # creation of an object (like USs, tasks and issues).\n #\n # Example:\n # div.us-created-by(tg-created-by-display, ng-model=\"us\")\n #\n # Requirements:\n # - model object must have the attributes 'created_date' and\n # 'owner'(ng-model)\n # - scope.usersById object is required.\n\n template = $template.get(\"common/components/created-by.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (model) ->\n owner = model.owner_extra_info or {\n full_name_display: $translate.instant(\"COMMON.EXTERNAL_USER\")\n photo: \"/images/user-noimage.png\"\n }\n\n html = template({\n owner: owner\n url: if owner?.is_active then $navUrls.resolve(\"user-profile\", {username: owner.username}) else \"\"\n date: moment(model.created_date).format($translate.instant(\"COMMON.DATETIME\"))\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n bindOnce $scope, $attrs.ngModel, (model) ->\n render(model) if model?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgCreatedByDisplay\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$tgNavUrls\",\n CreatedByDisplayDirective])\n\n\n#############################################################################\n## Watchers directive\n#############################################################################\n\nWatchersDirective = ($rootscope, $confirm, $repo, $qqueue, $template, $compile, $translate) ->\n # You have to include a div with the tg-lb-watchers directive in the page\n # where use this directive\n template = $template.get(\"common/components/watchers.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project?.my_permissions?.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (watchers) =>\n item = $model.$modelValue.clone()\n item.watchers = watchers\n $model.$setViewValue(item)\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n watchers = _.map(watchers, (watcherId) -> $scope.usersById[watcherId])\n renderWatchers(watchers)\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $model.$modelValue.revert()\n\n deleteWatcher = $qqueue.bindAdd (watcherIds) =>\n item = $model.$modelValue.clone()\n item.watchers = watcherIds\n $model.$setViewValue(item)\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n watchers = _.map(item.watchers, (watcherId) -> $scope.usersById[watcherId])\n renderWatchers(watchers)\n $rootscope.$broadcast(\"object:updated\")\n promise.then null, ->\n item.revert()\n $confirm.notify(\"error\")\n\n\n renderWatchers = (watchers) ->\n ctx = {\n watchers: watchers\n isEditable: isEditable()\n }\n\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n $el.on \"click\", \".js-delete-watcher\", (event) ->\n event.preventDefault()\n return if not isEditable()\n target = angular.element(event.currentTarget)\n watcherId = target.data(\"watcher-id\")\n\n title = $translate.instant(\"COMMON.WATCHERS.TITLE_LIGHTBOX_DELETE_WARTCHER\")\n message = $scope.usersById[watcherId].full_name_display\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n askResponse.finish()\n\n watcherIds = _.clone($model.$modelValue.watchers, false)\n watcherIds = _.pull(watcherIds, watcherId)\n\n deleteWatcher(watcherIds)\n\n $el.on \"click\", \".js-add-watcher\", (event) ->\n event.preventDefault()\n return if not isEditable()\n $scope.$apply ->\n $rootscope.$broadcast(\"watcher:add\", $model.$modelValue)\n\n $scope.$on \"watcher:added\", (ctx, watcherId) ->\n watchers = _.clone($model.$modelValue.watchers, false)\n watchers.push(watcherId)\n watchers = _.uniq(watchers)\n\n save(watchers)\n\n $scope.$watch $attrs.ngModel, (item) ->\n return if not item?\n watchers = _.map(item.watchers, (watcherId) -> $scope.usersById[watcherId])\n renderWatchers(watchers)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link, require:\"ngModel\"}\n\nmodule.directive(\"tgWatchers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\",\n \"$translate\", WatchersDirective])\n\n\n#############################################################################\n## Assigned to directive\n#############################################################################\n\nAssignedToDirective = ($rootscope, $confirm, $repo, $loading, $qqueue, $template, $translate, $compile) ->\n # You have to include a div with the tg-lb-assignedto directive in the page\n # where use this directive\n template = $template.get(\"common/components/assigned-to.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project?.my_permissions?.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (userId) =>\n $model.$modelValue.assigned_to = userId\n\n currentLoading = $loading()\n .target($el)\n .start()\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n renderAssignedTo($model.$modelValue)\n $rootscope.$broadcast(\"object:updated\")\n promise.then null, ->\n $model.$modelValue.revert()\n $confirm.notify(\"error\")\n currentLoading.finish()\n\n return promise\n\n renderAssignedTo = (issue) ->\n assignedToId = issue?.assigned_to\n assignedTo = if assignedToId? then $scope.usersById[assignedToId] else null\n\n ctx = {\n assignedTo: assignedTo\n isEditable: isEditable()\n }\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n $el.on \"click\", \".user-assigned\", (event) ->\n event.preventDefault()\n return if not isEditable()\n $scope.$apply ->\n $rootscope.$broadcast(\"assigned-to:add\", $model.$modelValue)\n\n $el.on \"click\", \".icon-delete\", (event) ->\n event.preventDefault()\n return if not isEditable()\n title = $translate.instant(\"COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED\")\n\n $confirm.ask(title).then (response) =>\n response.finish()\n $model.$modelValue.assigned_to = null\n save(null)\n\n $scope.$on \"assigned-to:added\", (ctx, userId, item) ->\n return if item.id != $model.$modelValue.id\n\n save(userId)\n\n $scope.$watch $attrs.ngModel, (instance) ->\n renderAssignedTo(instance)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link,\n require:\"ngModel\"\n }\n\nmodule.directive(\"tgAssignedTo\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$translate\", \"$compile\",\n AssignedToDirective])\n\n\n#############################################################################\n## Block Button directive\n#############################################################################\n\nBlockButtonDirective = ($rootscope, $loading, $template) ->\n template = $template.get(\"common/components/block-button.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n $scope.$watch $attrs.ngModel, (item) ->\n return if not item\n\n if isEditable()\n $el.find('.item-block').addClass('editable')\n\n if item.is_blocked\n $el.find('.item-block').hide()\n $el.find('.item-unblock').show()\n else\n $el.find('.item-block').show()\n $el.find('.item-unblock').hide()\n\n $el.on \"click\", \".item-block\", (event) ->\n event.preventDefault()\n $rootscope.$broadcast(\"block\", $model.$modelValue)\n\n $el.on \"click\", \".item-unblock\", (event) ->\n event.preventDefault()\n currentLoading = $loading()\n .target($el.find(\".item-unblock\"))\n .start()\n\n finish = ->\n currentLoading.finish()\n\n $rootscope.$broadcast(\"unblock\", $model.$modelValue, finish)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgBlockButton\", [\"$rootScope\", \"$tgLoading\", \"$tgTemplate\", BlockButtonDirective])\n\n\n#############################################################################\n## Delete Button directive\n#############################################################################\n\nDeleteButtonDirective = ($log, $repo, $confirm, $location, $template) ->\n template = $template.get(\"common/components/delete-button.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n if not $attrs.onDeleteGoToUrl\n return $log.error \"DeleteButtonDirective requires on-delete-go-to-url set in scope.\"\n if not $attrs.onDeleteTitle\n return $log.error \"DeleteButtonDirective requires on-delete-title set in scope.\"\n\n $el.on \"click\", \".button-delete\", (event) ->\n title = $attrs.onDeleteTitle\n subtitle = $model.$modelValue.subject\n\n $confirm.askOnDelete(title, subtitle).then (askResponse) =>\n promise = $repo.remove($model.$modelValue)\n promise.then =>\n askResponse.finish()\n url = $scope.$eval($attrs.onDeleteGoToUrl)\n $location.path(url)\n promise.then null, =>\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgDeleteButton\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgTemplate\", DeleteButtonDirective])\n\n\n#############################################################################\n## Editable subject directive\n#############################################################################\n\nEditableSubjectDirective = ($rootscope, $repo, $confirm, $loading, $qqueue, $template) ->\n template = $template.get(\"common/components/editable-subject.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n\n $scope.$on \"object:updated\", () ->\n $el.find('.edit-subject').hide()\n $el.find('.view-subject').show()\n\n isEditable = ->\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (subject) =>\n $model.$modelValue.subject = subject\n\n currentLoading = $loading()\n .target($el.find('.save-container'))\n .start()\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n $el.find('.edit-subject').hide()\n $el.find('.view-subject').show()\n promise.then null, ->\n $confirm.notify(\"error\")\n promise.finally ->\n currentLoading.finish()\n\n return promise\n\n $el.click ->\n return if not isEditable()\n $el.find('.edit-subject').show()\n $el.find('.view-subject').hide()\n $el.find('input').focus()\n\n $el.on \"click\", \".save\", (e) ->\n e.preventDefault()\n\n subject = $scope.item.subject\n save(subject)\n\n $el.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13\n subject = $scope.item.subject\n save(subject)\n else if event.keyCode == 27\n $scope.$apply () => $model.$modelValue.revert()\n\n $el.find('div.edit-subject').hide()\n $el.find('div.view-subject').show()\n\n $el.find('div.edit-subject').hide()\n $el.find('div.view-subject span.edit').hide()\n\n $scope.$watch $attrs.ngModel, (value) ->\n return if not value\n $scope.item = value\n\n if not isEditable()\n $el.find('.view-subject .edit').remove()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgEditableSubject\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\",\n \"$tgTemplate\", EditableSubjectDirective])\n\n\n#############################################################################\n## Editable description directive\n#############################################################################\n\nEditableDescriptionDirective = ($rootscope, $repo, $confirm, $compile, $loading, $selectedText, $qqueue, $template) ->\n template = $template.get(\"common/components/editable-description.html\")\n noDescriptionMegEditMode = $template.get(\"common/components/editable-description-msg-edit-mode.html\")\n noDescriptionMegReadMode = $template.get(\"common/components/editable-description-msg-read-mode.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n $el.find('.edit-description').hide()\n $el.find('.view-description .edit').hide()\n\n $scope.$on \"object:updated\", () ->\n $el.find('.edit-description').hide()\n $el.find('.view-description').show()\n\n isEditable = ->\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1\n\n save = $qqueue.bindAdd (description) =>\n $model.$modelValue.description = description\n\n currentLoading = $loading()\n .target($el.find('.save-container'))\n .start()\n\n promise = $repo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n $el.find('.edit-description').hide()\n $el.find('.view-description').show()\n promise.then null, ->\n $confirm.notify(\"error\")\n promise.finally ->\n currentLoading.finish()\n\n $el.on \"mouseup\", \".view-description\", (event) ->\n # We want to dettect the a inside the div so we use the target and\n # not the currentTarget\n target = angular.element(event.target)\n return if not isEditable()\n return if target.is('a')\n return if $selectedText.get().length\n\n $el.find('.edit-description').show()\n $el.find('.view-description').hide()\n $el.find('textarea').focus()\n\n $el.on \"click\", \"a\", (event) ->\n target = angular.element(event.target)\n href = target.attr('href')\n if href.indexOf(\"#\") == 0\n event.preventDefault()\n $('body').scrollTop($(href).offset().top)\n\n $el.on \"click\", \".save\", (e) ->\n e.preventDefault()\n\n description = $scope.item.description\n save(description)\n\n $el.on \"keydown\", \"textarea\", (event) ->\n if event.keyCode == 27\n $scope.$apply () => $scope.item.revert()\n $el.find('.edit-description').hide()\n $el.find('.view-description').show()\n\n $scope.$watch $attrs.ngModel, (value) ->\n return if not value\n $scope.item = value\n\n if isEditable()\n $el.find('.view-description .edit').show()\n $el.find('.view-description .us-content').addClass('editable')\n $scope.noDescriptionMsg = $compile(noDescriptionMegEditMode)($scope)\n else\n $scope.noDescriptionMsg = $compile(noDescriptionMegReadMode)($scope)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n template: template\n }\n\nmodule.directive(\"tgEditableDescription\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\", \"$tgLoading\",\n \"$selectedText\", \"$tgQqueue\", \"$tgTemplate\", EditableDescriptionDirective])\n\n\n#############################################################################\n## Common list directives\n#############################################################################\n## NOTE: These directives are used in issues and search and are\n## completely bindonce, they only serves for visualization of data.\n#############################################################################\n\nListItemUsStatusDirective = ->\n link = ($scope, $el, $attrs) ->\n us = $scope.$eval($attrs.tgListitemUsStatus)\n bindOnce $scope, \"usStatusById\", (usStatusById) ->\n $el.html(usStatusById[us.status].name)\n\n return {link:link}\n\nmodule.directive(\"tgListitemUsStatus\", ListItemUsStatusDirective)\n\n\nListItemTaskStatusDirective = ->\n link = ($scope, $el, $attrs) ->\n task = $scope.$eval($attrs.tgListitemTaskStatus)\n bindOnce $scope, \"taskStatusById\", (taskStatusById) ->\n $el.html(taskStatusById[task.status].name)\n\n return {link:link}\n\nmodule.directive(\"tgListitemTaskStatus\", ListItemTaskStatusDirective)\n\n\nListItemAssignedtoDirective = ($template) ->\n template = $template.get(\"common/components/list-item-assigned-to-avatar.html\", true)\n\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"usersById\", (usersById) ->\n item = $scope.$eval($attrs.tgListitemAssignedto)\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\"}\n\n member = usersById[item.assigned_to]\n if member\n ctx.imgurl = member.photo\n ctx.name = member.full_name_display\n\n $el.html(template(ctx))\n\n return {link:link}\n\nmodule.directive(\"tgListitemAssignedto\", [\"$tgTemplate\", ListItemAssignedtoDirective])\n\n\nListItemIssueStatusDirective = ->\n link = ($scope, $el, $attrs) ->\n issue = $scope.$eval($attrs.tgListitemIssueStatus)\n bindOnce $scope, \"issueStatusById\", (issueStatusById) ->\n $el.html(issueStatusById[issue.status].name)\n\n return {link:link}\n\nmodule.directive(\"tgListitemIssueStatus\", ListItemIssueStatusDirective)\n\n\nListItemTypeDirective = ->\n link = ($scope, $el, $attrs) ->\n render = (issueTypeById, issue) ->\n type = issueTypeById[issue.type]\n domNode = $el.find(\".level\")\n domNode.css(\"background-color\", type.color)\n domNode.attr(\"title\", type.name)\n\n bindOnce $scope, \"issueTypeById\", (issueTypeById) ->\n issue = $scope.$eval($attrs.tgListitemType)\n render(issueTypeById, issue)\n\n $scope.$watch $attrs.tgListitemType, (issue) ->\n render($scope.issueTypeById, issue)\n\n return {\n link: link\n templateUrl: \"common/components/level.html\"\n }\n\nmodule.directive(\"tgListitemType\", ListItemTypeDirective)\n\n\nListItemPriorityDirective = ->\n link = ($scope, $el, $attrs) ->\n render = (priorityById, issue) ->\n priority = priorityById[issue.priority]\n domNode = $el.find(\".level\")\n domNode.css(\"background-color\", priority.color)\n domNode.attr(\"title\", priority.name)\n\n bindOnce $scope, \"priorityById\", (priorityById) ->\n issue = $scope.$eval($attrs.tgListitemPriority)\n render(priorityById, issue)\n\n $scope.$watch $attrs.tgListitemPriority, (issue) ->\n render($scope.priorityById, issue)\n\n return {\n link: link\n templateUrl: \"common/components/level.html\"\n }\n\nmodule.directive(\"tgListitemPriority\", ListItemPriorityDirective)\n\n\nListItemSeverityDirective = ->\n link = ($scope, $el, $attrs) ->\n render = (severityById, issue) ->\n severity = severityById[issue.severity]\n domNode = $el.find(\".level\")\n domNode.css(\"background-color\", severity.color)\n domNode.attr(\"title\", severity.name)\n\n bindOnce $scope, \"severityById\", (severityById) ->\n issue = $scope.$eval($attrs.tgListitemSeverity)\n render(severityById, issue)\n\n $scope.$watch $attrs.tgListitemSeverity, (issue) ->\n render($scope.severityById, issue)\n\n return {\n link: link\n templateUrl: \"common/components/level.html\"\n }\n\nmodule.directive(\"tgListitemSeverity\", ListItemSeverityDirective)\n\n\n#############################################################################\n## Progress bar directive\n#############################################################################\n\nTgProgressBarDirective = ($template) ->\n template = $template.get(\"common/components/progress-bar.html\", true)\n\n render = (el, percentage) ->\n el.html(template({percentage: percentage}))\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$watch $attrs.tgProgressBar, (percentage) ->\n percentage = _.max([0 , percentage])\n percentage = _.min([100, percentage])\n render($el, percentage)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgProgressBar\", [\"$tgTemplate\", TgProgressBarDirective])\n\n\n#############################################################################\n## Main title directive\n#############################################################################\n\nTgMainTitleDirective = ($translate) ->\n link = ($scope, $el, $attrs) ->\n $attrs.$observe \"i18nSectionName\", (i18nSectionName) ->\n $scope.sectionName = $translate.instant(i18nSectionName)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n templateUrl: \"common/components/main-title.html\"\n scope: {\n projectName : \"=projectName\"\n }\n }\n\nmodule.directive(\"tgMainTitle\", [\"$translate\", TgMainTitleDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/confirm.coffee\n###\n\ntaiga = @.taiga\ntimeout = @.taiga.timeout\ncancelTimeout = @.taiga.cancelTimeout\ndebounce = @.taiga.debounce\nbindMethods = @.taiga.bindMethods\n\nNOTIFICATION_MSG = {\n \"success\":\n title: \"NOTIFICATION.OK\"\n message: \"NOTIFICATION.SAVED\"\n \"error\":\n title: \"NOTIFICATION.WARNING\"\n message: \"NOTIFICATION.WARNING_TEXT\"\n \"light-error\":\n title: \"NOTIFICATION.WARNING\"\n message: \"NOTIFICATION.WARNING_TEXT\"\n}\n\n\nclass ConfirmService extends taiga.Service\n @.$inject = [\"$q\", \"lightboxService\", \"$tgLoading\", \"$translate\"]\n\n constructor: (@q, @lightboxService, @loading, @translate) ->\n bindMethods(@)\n\n hide: (el)->\n if el\n @lightboxService.close(el)\n\n el.off(\".confirm-dialog\")\n\n ask: (title, subtitle, message, lightboxSelector=\".lightbox-generic-ask\") ->\n defered = @q.defer()\n\n el = angular.element(lightboxSelector)\n\n # Render content\n el.find(\"h2.title\").html(title)\n el.find(\"span.subtitle\").html(subtitle)\n el.find(\"span.message\").html(message)\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", debounce 2000, (event) =>\n event.preventDefault()\n target = angular.element(event.currentTarget)\n currentLoading = @loading()\n .target(target)\n .start()\n defered.resolve {\n finish: (ok=true) =>\n currentLoading.finish()\n if ok\n @.hide(el)\n }\n\n el.on \"click.confirm-dialog\", \"a.button-red\", (event) =>\n event.preventDefault()\n defered.reject()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n askOnDelete: (title, message) ->\n return @.ask(title, @translate.instant(\"NOTIFICATION.ASK_DELETE\"), message)\n\n askChoice: (title, subtitle, choices, replacement, warning, lightboxSelector=\".lightbox-ask-choice\") ->\n defered = @q.defer()\n\n el = angular.element(lightboxSelector)\n\n # Render content\n el.find(\".title\").html(title)\n el.find(\".subtitle\").html(subtitle)\n\n if replacement\n el.find(\".replacement\").html(replacement)\n else\n el.find(\".replacement\").remove()\n\n if warning\n el.find(\".warning\").html(warning)\n else\n el.find(\".warning\").remove()\n\n choicesField = el.find(\".choices\")\n choicesField.html('')\n _.each choices, (value, key) ->\n choicesField.append(angular.element(\"\"))\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", debounce 2000, (event) =>\n event.preventDefault()\n target = angular.element(event.currentTarget)\n currentLoading = @loading()\n .target(target)\n .start()\n defered.resolve {\n selected: choicesField.val()\n finish: (ok=true) =>\n currentLoading.finish()\n if ok\n @.hide(el)\n }\n\n el.on \"click.confirm-dialog\", \"a.button-red\", (event) =>\n event.preventDefault()\n defered.reject()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n error: (message) ->\n defered = @q.defer()\n\n el = angular.element(\".lightbox-generic-error\")\n\n # Render content\n el.find(\"h2.title\").html(message)\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n el.on \"click.confirm-dialog\", \"a.close\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n success: (title, message) ->\n defered = @q.defer()\n\n el = angular.element(\".lightbox-generic-success\")\n\n # Render content\n el.find(\"h2.title\").html(title) if title\n el.find(\"p.message\").html(message) if message\n\n # Assign event handlers\n el.on \"click.confirm-dialog\", \"a.button-green\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n el.on \"click.confirm-dialog\", \"a.close\", (event) =>\n event.preventDefault()\n defered.resolve()\n @.hide(el)\n\n @lightboxService.open(el)\n\n return defered.promise\n\n loader: (title, message) ->\n el = angular.element(\".lightbox-generic-loading\")\n\n # Render content\n el.find(\"h2.title\").html(title) if title\n el.find(\"p.message\").html(message) if message\n\n return {\n start: => @lightboxService.open(el)\n stop: => @lightboxService.close(el)\n update: (status, title, message, percent) =>\n el.find(\"h2.title\").html(title) if title\n el.find(\"p.message\").html(message) if message\n\n if percent\n el.find(\".spin\").addClass(\"hidden\")\n el.find(\".progress-bar-wrapper\").removeClass(\"hidden\")\n el.find(\".progress-bar-wrapper > .bar\").width(percent + '%')\n el.find(\".progress-bar-wrapper > span\").html(percent + '%').css('left', (percent - 9) + '%' )\n else\n el.find(\".spin\").removeClass(\"hidden\")\n el.find(\".progress-bar-wrapper\").addClass(\"hidden\")\n }\n\n notify: (type, message, title, time) ->\n # NOTE: Typesi are: error, success, light-error\n # See partials/components/notification-message.jade)\n # Add default texts to NOTIFICATION_MSG for new notification types\n\n selector = \".notification-message-#{type}\"\n el = angular.element(selector)\n\n return if el.hasClass(\"active\")\n\n if title\n el.find(\"h4\").html(title)\n else\n el.find(\"h4\").html(@translate.instant(NOTIFICATION_MSG[type].title))\n\n if message\n el.find(\"p\").html(message)\n else\n el.find(\"p\").html(@translate.instant(NOTIFICATION_MSG[type].message))\n\n body = angular.element(\"body\")\n body.find(\".notification-message .notification-light\")\n .removeClass('active')\n .addClass('inactive')\n\n body.find(selector)\n .removeClass('inactive')\n .addClass('active')\n\n if @.tsem\n cancelTimeout(@.tsem)\n\n if !time\n time = if type == 'error' or type == 'light-error' then 3500 else 1500\n\n @.tsem = timeout time, =>\n body.find(selector)\n .removeClass('active')\n .addClass('inactive')\n\n delete @.tsem\n\n el.on \"click\", \".icon-delete, .close\", (event) =>\n body.find(selector)\n .removeClass('active')\n .addClass('inactive')\n\n\nmodule = angular.module(\"taigaCommon\")\nmodule.service(\"$tgConfirm\", ConfirmService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/custom-field-values.coffee\n###\n\ntaiga = @.taiga\nbindMethods = @.taiga.bindMethods\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\ngenerateHash = taiga.generateHash\n\nmodule = angular.module(\"taigaCommon\")\n\n# Custom attributes types (see taiga-back/taiga/projects/custom_attributes/choices.py)\nTEXT_TYPE = \"text\"\nMULTILINE_TYPE = \"multiline\"\nDATE_TYPE = \"date\"\n\n\nTYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n },\n {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n },\n {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }\n]\n\n\n\nclass CustomAttributesValuesController extends taiga.Controller\n @.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\"]\n\n constructor: (@scope, @rootscope, @repo, @rs, @confirm, @q) ->\n bindMethods(@)\n @.type = null\n @.objectId = null\n @.projectId = null\n @.customAttributes = []\n @.customAttributesValues = null\n\n initialize: (type, objectId) ->\n @.project = @scope.project\n @.type = type\n @.objectId = objectId\n @.projectId = @scope.projectId\n\n loadCustomAttributesValues: ->\n return @.customAttributesValues if not @.objectId\n return @rs.customAttributesValues[@.type].get(@.objectId).then (customAttributesValues) =>\n @.customAttributes = @.project[\"#{@.type}_custom_attributes\"]\n @.customAttributesValues = customAttributesValues\n return customAttributesValues\n\n getAttributeValue: (attribute) ->\n attributeValue = _.clone(attribute, false)\n attributeValue.value = @.customAttributesValues.attributes_values[attribute.id]\n return attributeValue\n\n updateAttributeValue: (attributeValue) ->\n onSuccess = =>\n @rootscope.$broadcast(\"custom-attributes-values:edit\")\n\n onError = (response) =>\n @confirm.notify(\"error\")\n return @q.reject()\n\n # We need to update the full array so angular understand the model is modified\n attributesValues = _.clone(@.customAttributesValues.attributes_values, true)\n attributesValues[attributeValue.id] = attributeValue.value\n @.customAttributesValues.attributes_values = attributesValues\n @.customAttributesValues.id = @.objectId\n return @repo.save(@.customAttributesValues).then(onSuccess, onError)\n\n\nCustomAttributesValuesDirective = ($templates, $storage) ->\n template = $templates.get(\"custom-attributes/custom-attributes-values.html\", true)\n collapsedHash = (type) ->\n return generateHash([\"custom-attributes-collapsed\", type])\n\n link = ($scope, $el, $attrs, $ctrls) ->\n $ctrl = $ctrls[0]\n $model = $ctrls[1]\n\n bindOnce $scope, $attrs.ngModel, (value) ->\n $ctrl.initialize($attrs.type, value.id)\n $ctrl.loadCustomAttributesValues()\n\n $el.on \"click\", \".custom-fields-header a\", ->\n hash = collapsedHash($attrs.type)\n collapsed = not($storage.get(hash) or false)\n $storage.set(hash, collapsed)\n if collapsed\n $el.find(\".custom-fields-header a\").removeClass(\"open\")\n $el.find(\".custom-fields-body\").removeClass(\"open\")\n else\n $el.find(\".custom-fields-header a\").addClass(\"open\")\n $el.find(\".custom-fields-body\").addClass(\"open\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n templateFn = ($el, $attrs) ->\n collapsed = $storage.get(collapsedHash($attrs.type)) or false\n\n return template({\n requiredEditionPerm: $attrs.requiredEditionPerm\n collapsed: collapsed\n })\n\n return {\n require: [\"tgCustomAttributesValues\", \"ngModel\"]\n controller: CustomAttributesValuesController\n controllerAs: \"ctrl\"\n restrict: \"AE\"\n scope: true\n link: link\n template: templateFn\n }\n\nmodule.directive(\"tgCustomAttributesValues\", [\"$tgTemplate\", \"$tgStorage\", \"$translate\",\n CustomAttributesValuesDirective])\n\n\nCustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, datePickerConfigService) ->\n template = $template.get(\"custom-attributes/custom-attribute-value.html\", true)\n templateEdit = $template.get(\"custom-attributes/custom-attribute-value-edit.html\", true)\n\n link = ($scope, $el, $attrs, $ctrl) ->\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n\n render = (attributeValue, edit=false) ->\n if attributeValue.type is DATE_TYPE and attributeValue.value\n value = moment(attributeValue.value, \"YYYY-MM-DD\").format(prettyDate)\n else\n value = attributeValue.value\n editable = isEditable()\n\n ctx = {\n id: attributeValue.id\n name: attributeValue.name\n description: attributeValue.description\n value: value\n isEditable: editable\n type: attributeValue.type\n }\n\n if editable and (edit or not value)\n html = templateEdit(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n if attributeValue.type == DATE_TYPE\n datePickerConfig = datePickerConfigService.get()\n _.merge(datePickerConfig, {\n field: $el.find(\"input[name=value]\")[0]\n onSelect: (date) =>\n selectedDate = date\n onOpen: =>\n $el.picker.setDate(selectedDate) if selectedDate?\n })\n $el.picker = new Pikaday(datePickerConfig)\n else\n html = template(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n isEditable = ->\n permissions = $scope.project.my_permissions\n requiredEditionPerm = $attrs.requiredEditionPerm\n return permissions.indexOf(requiredEditionPerm) > -1\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n attributeValue.value = $el.find(\"input[name=value], textarea[name='value']\").val()\n if attributeValue.type is DATE_TYPE\n if moment(attributeValue.value, prettyDate).isValid()\n attributeValue.value = moment(attributeValue.value, prettyDate).format(\"YYYY-MM-DD\")\n else\n attributeValue.value = \"\"\n\n $scope.$apply ->\n $ctrl.updateAttributeValue(attributeValue).then ->\n render(attributeValue, false)\n\n setFocusAndSelectOnInputField = ->\n $el.find(\"input[name='value'], textarea[name='value']\").focus().select()\n\n # Bootstrap\n attributeValue = $scope.$eval($attrs.tgCustomAttributeValue)\n render(attributeValue)\n\n ## Actions (on view mode)\n $el.on \"click\", \".js-value-view-mode\", ->\n return if not isEditable()\n return if $selectedText.get().length\n render(attributeValue, true)\n setFocusAndSelectOnInputField()\n\n $el.on \"click\", \"a.icon-edit\", (event) ->\n event.preventDefault()\n render(attributeValue, true)\n setFocusAndSelectOnInputField()\n\n ## Actions (on edit mode)\n $el.on \"keyup\", \"input[name=value], textarea[name='value']\", (event) ->\n if event.keyCode is 13 and event.currentTarget.type isnt \"textarea\"\n submit(event)\n else if event.keyCode == 27\n render(attributeValue, false)\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \"a.icon-floppy\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n require: \"^tgCustomAttributesValues\"\n restrict: \"AE\"\n }\n\nmodule.directive(\"tgCustomAttributeValue\", [\"$tgTemplate\", \"$selectedText\", \"$compile\", \"$translate\",\n \"tgDatePickerConfigService\", CustomAttributeValueDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/estimation.coffee\n###\n\ntaiga = @.taiga\ngroupBy = @.taiga.groupBy\n\nmodule = angular.module(\"taigaCommon\")\n\n#############################################################################\n## User story estimation directive (for Lightboxes)\n#############################################################################\n\nLbUsEstimationDirective = ($tgEstimationsService, $rootScope, $repo, $confirm, $template, $compile) ->\n # Display the points of a US and you can edit it.\n #\n # Example:\n # tg-lb-us-estimation-progress-bar(ng-model=\"us\")\n #\n # Requirements:\n # - Us object (ng-model)\n # - scope.project object\n\n link = ($scope, $el, $attrs, $model) ->\n $scope.$watch $attrs.ngModel, (us) ->\n if us\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project)\n estimationProcess.onSelectedPointForRole = (roleId, pointId) ->\n $scope.$apply ->\n $model.$setViewValue(us)\n\n\n estimationProcess.render = () ->\n ctx = {\n totalPoints: @calculateTotalPoints()\n roles: @calculateRoles()\n editable: @isEditable\n }\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\"\n template = $template.get(mainTemplate, true)\n html = template(ctx)\n html = $compile(html)($scope)\n @$el.html(html)\n\n estimationProcess.render()\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgLbUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgTemplate\", \"$compile\", LbUsEstimationDirective])\n\n\n#############################################################################\n## User story estimation directive\n#############################################################################\n\nUsEstimationDirective = ($tgEstimationsService, $rootScope, $repo, $confirm, $qqueue, $template, $compile) ->\n # Display the points of a US and you can edit it.\n #\n # Example:\n # tg-us-estimation-progress-bar(ng-model=\"us\")\n #\n # Requirements:\n # - Us object (ng-model)\n # - scope.project object\n\n link = ($scope, $el, $attrs, $model) ->\n $scope.$watch $attrs.ngModel, (us) ->\n if us\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project)\n estimationProcess.onSelectedPointForRole = (roleId, pointId) ->\n @save(roleId, pointId).then ->\n $rootScope.$broadcast(\"object:updated\")\n\n estimationProcess.render = () ->\n ctx = {\n totalPoints: @calculateTotalPoints()\n roles: @calculateRoles()\n editable: @isEditable\n }\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\"\n template = $template.get(mainTemplate, true)\n html = template(ctx)\n html = $compile(html)($scope)\n @$el.html(html)\n\n estimationProcess.render()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\"\n UsEstimationDirective])\n\n\n#############################################################################\n## Estimations service\n#############################################################################\n\nEstimationsService = ($template, $qqueue, $repo, $confirm, $q) ->\n pointsTemplate = $template.get(\"common/estimation/us-estimation-points.html\", true)\n\n class EstimationProcess\n constructor: (@$el, @us, @project) ->\n @isEditable = @project.my_permissions.indexOf(\"modify_us\") != -1\n @roles = @project.roles\n @points = @project.points\n @pointsById = groupBy(@points, (x) -> x.id)\n @onSelectedPointForRole = (roleId, pointId) ->\n @render = () ->\n\n save: (roleId, pointId) ->\n deferred = $q.defer()\n $qqueue.add () =>\n onSuccess = =>\n deferred.resolve()\n $confirm.notify(\"success\")\n\n onError = =>\n $confirm.notify(\"error\")\n @us.revert()\n @render()\n deferred.reject()\n\n $repo.save(@us).then(onSuccess, onError)\n\n return deferred.promise\n\n calculateTotalPoints: () ->\n values = _.map(@us.points, (v, k) => @pointsById[v]?.value)\n\n if values.length == 0\n return \"0\"\n\n notNullValues = _.filter(values, (v) -> v?)\n if notNullValues.length == 0\n return \"?\"\n\n return _.reduce(notNullValues, (acc, num) -> acc + num)\n\n calculateRoles: () ->\n computableRoles = _.filter(@project.roles, \"computable\")\n roles = _.map computableRoles, (role) =>\n pointId = @us.points[role.id]\n pointObj = @pointsById[pointId]\n role = _.clone(role, true)\n role.points = if pointObj? and pointObj.name? then pointObj.name else \"?\"\n return role\n\n return roles\n\n bindClickEvents: =>\n @$el.on \"click\", \".total.clickable\", (event) =>\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n roleId = target.data(\"role-id\")\n @renderPointsSelector(roleId, target)\n target.siblings().removeClass('active')\n target.addClass('active')\n\n @$el.on \"click\", \".point\", (event) =>\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n roleId = target.data(\"role-id\")\n pointId = target.data(\"point-id\")\n @$el.find(\".popover\").popover().close()\n points = _.clone(@us.points, true)\n points[roleId] = pointId\n @us.points = points\n @render()\n @onSelectedPointForRole(roleId, pointId)\n\n renderPointsSelector: (roleId, target) ->\n points = _.map @points, (point) =>\n point = _.clone(point, true)\n point.selected = if @us.points[roleId] == point.id then false else true\n return point\n\n maxPointLength = 5\n horizontalList = _.some points, (point) => point.name.length > maxPointLength\n\n html = pointsTemplate({\"points\": points, roleId: roleId, horizontal: horizontalList})\n # Remove any previous state\n @$el.find(\".popover\").popover().close()\n @$el.find(\".pop-points-open\").remove()\n # Render into DOM and show the new created element\n if target?\n @$el.find(target).append(html)\n else\n @$el.append(html)\n\n @$el.find(\".pop-points-open\").popover().open ->\n $(this)\n .removeClass(\"active\")\n .closest(\"li\").removeClass(\"active\")\n\n @$el.find(\".pop-points-open\").show()\n\n pop = @$el.find(\".pop-points-open\")\n if pop.offset().top + pop.height() > document.body.clientHeight\n pop.addClass('pop-bottom')\n\n create = ($el, us, project) ->\n $el.unbind(\"click\")\n\n estimationProcess = new EstimationProcess($el, us, project)\n\n if estimationProcess.isEditable\n estimationProcess.bindClickEvents()\n\n return estimationProcess\n\n return {\n create: create\n }\n\nmodule.factory(\"$tgEstimationsService\", [\"$tgTemplate\", \"$tgQqueue\", \"$tgRepo\", \"$tgConfirm\", \"$q\", EstimationsService])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/filters.coffee\n###\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaCommon\")\n\n\ndefaultFilter = ->\n return (value, defaultValue) ->\n if value is [null, undefined]\n return defaultValue\n return value\n\nmodule.filter(\"default\", defaultFilter)\n\n\nyesNoFilter = ($translate) ->\n return (value) ->\n if value\n return $translate.instant(\"COMMON.YES\")\n\n return $translate.instant(\"COMMON.NO\")\n\nmodule.filter(\"yesNo\", [\"$translate\", yesNoFilter])\n\n\nunslugify = ->\n return taiga.unslugify\n\nmodule.filter(\"unslugify\", unslugify)\n\n\nmomentFormat = ->\n return (input, format) ->\n if input\n return moment(input).format(format)\n return \"\"\n\nmodule.filter(\"momentFormat\", momentFormat)\n\n\nmomentFromNow = ->\n return (input, without_suffix) ->\n if input\n return moment(input).fromNow(without_suffix or false)\n return \"\"\n\nmodule.filter(\"momentFromNow\", momentFromNow)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/history.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaCommon\")\n\nIGNORED_FIELDS = {\n \"userstories.userstory\": [\n \"watchers\", \"kanban_order\", \"backlog_order\", \"sprint_order\", \"finish_date\"\n ]\n \"tasks.task\": [\n \"watchers\", \"us_order\", \"taskboard_order\"\n ]\n}\n\n#############################################################################\n## History Directive (Main)\n#############################################################################\n\n\nclass HistoryController extends taiga.Controller\n @.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\"]\n\n constructor: (@scope, @repo, @rs) ->\n\n initialize: (type, objectId) ->\n @.type = type\n @.objectId = objectId\n\n loadHistory: (type, objectId) ->\n return @rs.history.get(type, objectId).then (history) =>\n for historyResult in history\n # If description was modified take only the description_html field\n if historyResult.values_diff.description_diff?\n historyResult.values_diff.description = historyResult.values_diff.description_diff\n\n delete historyResult.values_diff.description_html\n delete historyResult.values_diff.description_diff\n\n # If block note was modified take only the blocked_note_html field\n if historyResult.values_diff.blocked_note_diff?\n historyResult.values_diff.blocked_note = historyResult.values_diff.blocked_note_diff\n\n delete historyResult.values_diff.blocked_note_html\n delete historyResult.values_diff.blocked_note_diff\n\n @scope.history = history\n @scope.comments = _.filter(history, (item) -> item.comment != \"\")\n\n deleteComment: (type, objectId, activityId) ->\n return @rs.history.deleteComment(type, objectId, activityId).then => @.loadHistory(type, objectId)\n\n undeleteComment: (type, objectId, activityId) ->\n return @rs.history.undeleteComment(type, objectId, activityId).then => @.loadHistory(type, objectId)\n\n\nHistoryDirective = ($log, $loading, $qqueue, $template, $confirm, $translate, $compile, $navUrls, $rootScope) ->\n templateChangeDiff = $template.get(\"common/history/history-change-diff.html\", true)\n templateChangePoints = $template.get(\"common/history/history-change-points.html\", true)\n templateChangeGeneric = $template.get(\"common/history/history-change-generic.html\", true)\n templateChangeAttachment = $template.get(\"common/history/history-change-attachment.html\", true)\n templateChangeList = $template.get(\"common/history/history-change-list.html\", true)\n templateDeletedComment = $template.get(\"common/history/history-deleted-comment.html\", true)\n templateActivity = $template.get(\"common/history/history-activity.html\", true)\n templateBaseEntries = $template.get(\"common/history/history-base-entries.html\", true)\n templateBase = $template.get(\"common/history/history-base.html\", true)\n\n link = ($scope, $el, $attrs, $ctrl) ->\n # Bootstraping\n type = $attrs.type\n objectId = null\n\n showAllComments = false\n showAllActivity = false\n\n getPrettyDateFormat = ->\n return $translate.instant(\"ACTIVITY.DATETIME\")\n\n bindOnce $scope, $attrs.ngModel, (model) ->\n type = $attrs.type\n objectId = model.id\n\n $ctrl.initialize(type, objectId)\n $ctrl.loadHistory(type, objectId)\n\n # Helpers\n getHumanizedFieldName = (field) ->\n humanizedFieldNames = {\n subject : $translate.instant(\"ACTIVITY.FIELDS.SUBJECT\")\n name: $translate.instant(\"ACTIVITY.FIELDS.NAME\")\n description : $translate.instant(\"ACTIVITY.FIELDS.DESCRIPTION\")\n content: $translate.instant(\"ACTIVITY.FIELDS.CONTENT\")\n status: $translate.instant(\"ACTIVITY.FIELDS.STATUS\")\n is_closed : $translate.instant(\"ACTIVITY.FIELDS.IS_CLOSED\")\n finish_date : $translate.instant(\"ACTIVITY.FIELDS.FINISH_DATE\")\n type: $translate.instant(\"ACTIVITY.FIELDS.TYPE\")\n priority: $translate.instant(\"ACTIVITY.FIELDS.PRIORITY\")\n severity: $translate.instant(\"ACTIVITY.FIELDS.SEVERITY\")\n assigned_to : $translate.instant(\"ACTIVITY.FIELDS.ASSIGNED_TO\")\n watchers : $translate.instant(\"ACTIVITY.FIELDS.WATCHERS\")\n milestone : $translate.instant(\"ACTIVITY.FIELDS.MILESTONE\")\n user_story: $translate.instant(\"ACTIVITY.FIELDS.USER_STORY\")\n project: $translate.instant(\"ACTIVITY.FIELDS.PROJECT\")\n is_blocked: $translate.instant(\"ACTIVITY.FIELDS.IS_BLOCKED\")\n blocked_note: $translate.instant(\"ACTIVITY.FIELDS.BLOCKED_NOTE\")\n points: $translate.instant(\"ACTIVITY.FIELDS.POINTS\")\n client_requirement : $translate.instant(\"ACTIVITY.FIELDS.CLIENT_REQUIREMENT\")\n team_requirement : $translate.instant(\"ACTIVITY.FIELDS.TEAM_REQUIREMENT\")\n is_iocaine: $translate.instant(\"ACTIVITY.FIELDS.IS_IOCAINE\")\n tags: $translate.instant(\"ACTIVITY.FIELDS.TAGS\")\n attachments : $translate.instant(\"ACTIVITY.FIELDS.ATTACHMENTS\")\n is_deprecated: $translate.instant(\"ACTIVITY.FIELDS.IS_DEPRECATED\")\n blocked_note: $translate.instant(\"ACTIVITY.FIELDS.BLOCKED_NOTE\")\n is_blocked: $translate.instant(\"ACTIVITY.FIELDS.IS_BLOCKED\")\n order: $translate.instant(\"ACTIVITY.FIELDS.ORDER\")\n backlog_order: $translate.instant(\"ACTIVITY.FIELDS.BACKLOG_ORDER\")\n sprint_order: $translate.instant(\"ACTIVITY.FIELDS.SPRINT_ORDER\")\n kanban_order: $translate.instant(\"ACTIVITY.FIELDS.KANBAN_ORDER\")\n taskboard_order: $translate.instant(\"ACTIVITY.FIELDS.TASKBOARD_ORDER\")\n us_order: $translate.instant(\"ACTIVITY.FIELDS.US_ORDER\")\n }\n\n return humanizedFieldNames[field] or field\n\n countChanges = (comment) ->\n return _.keys(comment.values_diff).length\n\n formatChange = (change) ->\n if _.isArray(change)\n if change.length == 0\n return $translate.instant(\"ACTIVITY.VALUES.EMPTY\")\n return change.join(\", \")\n\n if change == \"\"\n return $translate.instant(\"ACTIVITY.VALUES.EMPTY\")\n\n if not change? or change == false\n return $translate.instant(\"ACTIVITY.VALUES.NO\")\n\n if change == true\n return $translate.instant(\"ACTIVITY.VALUES.YES\")\n\n return change\n\n # Render into string (operations without mutability)\n\n renderAttachmentEntry = (value) ->\n attachments = _.map value, (changes, type) ->\n if type == \"new\"\n return _.map changes, (change) ->\n return templateChangeDiff({\n name: $translate.instant(\"ACTIVITY.NEW_ATTACHMENT\"),\n diff: change.filename\n })\n else if type == \"deleted\"\n return _.map changes, (change) ->\n return templateChangeDiff({\n name: $translate.instant(\"ACTIVITY.DELETED_ATTACHMENT\"),\n diff: change.filename\n })\n else\n return _.map changes, (change) ->\n name = $translate.instant(\"ACTIVITY.UPDATED_ATTACHMENT\", {filename: change.filename})\n\n diff = _.map change.changes, (values, name) ->\n return {\n name: getHumanizedFieldName(name)\n from: formatChange(values[0])\n to: formatChange(values[1])\n }\n\n return templateChangeAttachment({name: name, diff: diff})\n\n return _.flatten(attachments).join(\"\\n\")\n\n renderCustomAttributesEntry = (value) ->\n customAttributes = _.map value, (changes, type) ->\n if type == \"new\"\n return _.map changes, (change) ->\n html = templateChangeGeneric({\n name: change.name,\n from: formatChange(\"\"),\n to: formatChange(change.value)\n })\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n else if type == \"deleted\"\n return _.map changes, (change) ->\n return templateChangeDiff({\n name: $translate.instant(\"ACTIVITY.DELETED_CUSTOM_ATTRIBUTE\")\n diff: change.name\n })\n else\n return _.map changes, (change) ->\n customAttrsChanges = _.map change.changes, (values) ->\n return templateChangeGeneric({\n name: change.name\n from: formatChange(values[0])\n to: formatChange(values[1])\n })\n return _.flatten(customAttrsChanges).join(\"\\n\")\n\n return _.flatten(customAttributes).join(\"\\n\")\n\n renderChangeEntry = (field, value) ->\n if field == \"description\"\n return templateChangeDiff({name: getHumanizedFieldName(\"description\"), diff: value[1]})\n else if field == \"blocked_note\"\n return templateChangeDiff({name: getHumanizedFieldName(\"blocked_note\"), diff: value[1]})\n else if field == \"points\"\n html = templateChangePoints({points: value})\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n else if field == \"attachments\"\n return renderAttachmentEntry(value)\n else if field == \"custom_attributes\"\n return renderCustomAttributesEntry(value)\n else if field in [\"tags\", \"watchers\"]\n name = getHumanizedFieldName(field)\n removed = _.difference(value[0], value[1])\n added = _.difference(value[1], value[0])\n html = templateChangeList({name:name, removed:removed, added: added})\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n else if field == \"assigned_to\"\n name = getHumanizedFieldName(field)\n from = formatChange(value[0] or $translate.instant(\"ACTIVITY.VALUES.UNASSIGNED\"))\n to = formatChange(value[1] or $translate.instant(\"ACTIVITY.VALUES.UNASSIGNED\"))\n return templateChangeGeneric({name:name, from:from, to: to})\n else\n name = getHumanizedFieldName(field)\n from = formatChange(value[0])\n to = formatChange(value[1])\n return templateChangeGeneric({name:name, from:from, to: to})\n\n renderChangeEntries = (change) ->\n changeModel = change.key.split(\":\")[0]\n if IGNORED_FIELDS[changeModel]?\n change.values_diff = _.removeKeys(change.values_diff, IGNORED_FIELDS[changeModel])\n\n return _.map(change.values_diff, (value, field) -> renderChangeEntry(field, value))\n\n renderChangesHelperText = (change) ->\n size = countChanges(change)\n return $translate.instant(\"ACTIVITY.SIZE_CHANGE\", {size: size}, 'messageformat')\n\n renderComment = (comment) ->\n if (comment.delete_comment_date or comment.delete_comment_user?.name)\n html = templateDeletedComment({\n deleteCommentDate: moment(comment.delete_comment_date).format(getPrettyDateFormat()) if comment.delete_comment_date\n deleteCommentUser: comment.delete_comment_user.name\n deleteComment: comment.comment_html\n activityId: comment.id\n canRestoreComment: ($scope.user and\n (comment.delete_comment_user.pk == $scope.user.id or\n $scope.project.my_permissions.indexOf(\"modify_project\") > -1))\n })\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n\n html = templateActivity({\n avatar: comment.user.photo\n userFullName: comment.user.name\n userProfileUrl: if comment.user.is_active then $navUrls.resolve(\"user-profile\", {username: comment.user.username}) else \"\"\n creationDate: moment(comment.created_at).format(getPrettyDateFormat())\n comment: comment.comment_html\n changesText: renderChangesHelperText(comment)\n changes: renderChangeEntries(comment)\n mode: \"comment\"\n deleteCommentDate: moment(comment.delete_comment_date).format(getPrettyDateFormat()) if comment.delete_comment_date\n deleteCommentUser: comment.delete_comment_user.name if comment.delete_comment_user?.name\n activityId: comment.id\n canDeleteComment: comment.user.pk == $scope.user?.id or $scope.project.my_permissions.indexOf(\"modify_project\") > -1\n })\n\n html = $compile(html)($scope)\n\n return html[0].outerHTML\n\n renderChange = (change) ->\n return templateActivity({\n avatar: change.user.photo\n userFullName: change.user.name\n userProfileUrl: if change.user.is_active then $navUrls.resolve(\"user-profile\", {username: change.user.username}) else \"\"\n creationDate: moment(change.created_at).format(getPrettyDateFormat())\n comment: change.comment_html\n changes: renderChangeEntries(change)\n changesText: \"\"\n mode: \"activity\"\n deleteCommentDate: moment(change.delete_comment_date).format(getPrettyDateFormat()) if change.delete_comment_date\n deleteCommentUser: change.delete_comment_user.name if change.delete_comment_user?.name\n activityId: change.id\n })\n\n renderHistory = (entries, totalEntries) ->\n if entries.length == totalEntries\n showMore = 0\n else\n showMore = totalEntries - entries.length\n\n html = templateBaseEntries({entries: entries, showMore:showMore})\n html = $compile(html)($scope)\n return html\n\n # Render into DOM (operations with dom mutability)\n\n renderComments = ->\n comments = $scope.comments or []\n totalComments = comments.length\n if not showAllComments\n comments = _.last(comments, 4)\n\n comments = _.map(comments, (x) -> renderComment(x))\n html = renderHistory(comments, totalComments)\n $el.find(\".comments-list\").html(html)\n\n renderActivity = ->\n changes = $scope.history or []\n totalChanges = changes.length\n if not showAllActivity\n changes = _.last(changes, 4)\n\n changes = _.map(changes, (x) -> renderChange(x))\n html = renderHistory(changes, totalChanges)\n $el.find(\".changes-list\").html(html)\n\n save = $qqueue.bindAdd (target) =>\n $scope.$broadcast(\"markdown-editor:submit\")\n\n $el.find(\".comment-list\").addClass(\"activeanimation\")\n\n currentLoading = $loading()\n .target(target)\n .start()\n\n onSuccess = ->\n $rootScope.$broadcast(\"comment:new\")\n\n $ctrl.loadHistory(type, objectId).finally ->\n currentLoading.finish()\n\n onError = ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n model = $scope.$eval($attrs.ngModel)\n\n $ctrl.repo.save(model).then(onSuccess, onError)\n\n # Watchers\n\n $scope.$watch(\"comments\", renderComments)\n $scope.$watch(\"history\", renderActivity)\n\n $scope.$on(\"object:updated\", -> $ctrl.loadHistory(type, objectId))\n\n # Events\n\n $el.on \"click\", \".add-comment button.button-green\", debounce 2000, (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n save(target)\n\n $el.on \"click\", \"a\", (event) ->\n target = angular.element(event.target)\n href = target.attr('href')\n if href && href.indexOf(\"#\") == 0\n event.preventDefault()\n $('body').scrollTop($(href).offset().top)\n\n $el.on \"click\", \".show-more\", (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n if target.parent().is(\".changes-list\")\n showAllActivity = not showAllActivity\n renderActivity()\n else\n showAllComments = not showAllComments\n renderComments()\n\n $el.on \"click\", \".show-deleted-comment\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.parents('.activity-single').find('.hide-deleted-comment').show()\n target.parents('.activity-single').find('.show-deleted-comment').hide()\n target.parents('.activity-single').find('.comment-body').show()\n\n $el.on \"click\", \".hide-deleted-comment\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.parents('.activity-single').find('.hide-deleted-comment').hide()\n target.parents('.activity-single').find('.show-deleted-comment').show()\n target.parents('.activity-single').find('.comment-body').hide()\n\n $el.on \"click\", \".changes-title\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.parent().find(\".change-entry\").toggleClass(\"active\")\n\n $el.on \"focus\", \".add-comment textarea\", (event) ->\n $(this).addClass('active')\n\n $el.on \"click\", \".history-tabs li a\", (event) ->\n target = angular.element(event.currentTarget)\n\n $el.find(\".history-tabs li a\").removeClass(\"active\")\n target.addClass(\"active\")\n\n $el.find(\".history section\").addClass(\"hidden\")\n $el.find(\".history section.#{target.data('section-class')}\").removeClass(\"hidden\")\n\n $el.on \"click\", \".comment-delete\", debounce 2000, (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n activityId = target.data('activity-id')\n $ctrl.deleteComment(type, objectId, activityId)\n\n $el.on \"click\", \".comment-restore\", debounce 2000, (event) ->\n event.preventDefault()\n\n target = angular.element(event.currentTarget)\n activityId = target.data('activity-id')\n $ctrl.undeleteComment(type, objectId, activityId)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n templateFn = ($el, $attrs) ->\n html = templateBase({ngmodel: $attrs.ngModel, type: $attrs.type, mode: $attrs.mode})\n\n return html\n\n return {\n controller: HistoryController\n template: templateFn\n restrict: \"AE\"\n link: link\n # require: [\"ngModel\", \"tgHistory\"]\n }\n\n\nmodule.directive(\"tgHistory\", [\"$log\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$tgConfirm\", \"$translate\",\n \"$compile\", \"$tgNavUrls\", \"$rootScope\", HistoryDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/importer.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\n\nImportProjectButtonDirective = ($rs, $confirm, $location, $navUrls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $el.on \"click\", \".import-project-button\", (event) ->\n event.preventDefault()\n $el.find(\"input.import-file\").val(\"\")\n $el.find(\"input.import-file\").trigger(\"click\")\n\n $el.on \"change\", \"input.import-file\", (event) ->\n event.preventDefault()\n file = event.target.files[0]\n return if not file\n\n loader = $confirm.loader($translate.instant(\"PROJECT.IMPORT.UPLOADING_FILE\"))\n\n onSuccess = (result) ->\n loader.stop()\n if result.status == 202 # Async mode\n title = $translate.instant(\"PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE\")\n message = $translate.instant(\"PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE\")\n $confirm.success(title, message)\n\n else # result.status == 201 # Sync mode\n ctx = {project: result.data.slug}\n $location.path($navUrls.resolve(\"project-admin-project-profile-details\", ctx))\n msg = $translate.instant(\"PROJECT.IMPORT.SYNC_SUCCESS\")\n $confirm.notify(\"success\", msg)\n\n onError = (result) ->\n loader.stop()\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR\")\n\n if result.status == 429 # TOO MANY REQUESTS\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST\")\n else if result.data?._error_message\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_MESSAGE\", {error_message: result.data._error_message})\n $confirm.notify(\"error\", errorMsg)\n\n loader.start()\n $rs.projects.import(file, loader.update).then(onSuccess, onError)\n\n return {link: link}\n\nmodule.directive(\"tgImportProjectButton\", [\"$tgResources\", \"$tgConfirm\", \"$location\", \"$tgNavUrls\", \"$translate\",\n ImportProjectButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/lightboxes.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\nbindOnce = @.taiga.bindOnce\ntimeout = @.taiga.timeout\ndebounce = @.taiga.debounce\n\n#############################################################################\n## Common Lightbox Services\n#############################################################################\n\n# the lightboxContent hide/show doesn't have sense because is an IE hack\nclass LightboxService extends taiga.Service\n constructor: (@animationFrame, @q) ->\n\n open: ($el) ->\n defered = @q.defer()\n\n lightboxContent = $el.children().not(\".close\")\n lightboxContent.hide()\n\n @animationFrame.add ->\n $el.css('display', 'flex')\n\n @animationFrame.add ->\n $el.addClass(\"open\")\n\n @animationFrame.add ->\n $el.find('input,textarea').first().focus()\n\n @animationFrame.add =>\n lightboxContent.show()\n defered.resolve()\n\n docEl = angular.element(document)\n docEl.on \"keydown.lightbox\", (e) =>\n code = if e.keyCode then e.keyCode else e.which\n @.close($el) if code == 27\n\n return defered.promise\n\n close: ($el) ->\n docEl = angular.element(document)\n docEl.off(\".lightbox\")\n docEl.off(\".keyboard-navigation\") # Hack: to fix problems in the WYSIWYG textareas when press ENTER\n $el.one \"transitionend\", =>\n $el.removeAttr('style')\n $el.removeClass(\"open\").removeClass('close')\n\n $el.addClass('close')\n\n if $el.hasClass(\"remove-on-close\")\n scope = $el.data(\"scope\")\n scope.$destroy()\n $el.remove()\n\n closeAll: ->\n docEl = angular.element(document)\n for lightboxEl in docEl.find(\".lightbox.open\")\n @.close($(lightboxEl))\n\n\nmodule.service(\"lightboxService\", [\"animationFrame\", \"$q\", LightboxService])\n\n\nclass LightboxKeyboardNavigationService extends taiga.Service\n stop: ->\n docEl = angular.element(document)\n docEl.off(\".keyboard-navigation\")\n\n dispatch: ($el, code) ->\n activeElement = $el.find(\".active\")\n\n # Key: enter\n if code == 13\n if $el.find(\".watcher-single\").length == 1\n $el.find('.watcher-single:first').trigger(\"click\")\n else\n activeElement.trigger(\"click\")\n\n # Key: down\n else if code == 40\n if not activeElement.length\n $el.find('.watcher-single:first').addClass('active')\n else\n next = activeElement.next('.watcher-single')\n if next.length\n activeElement.removeClass('active')\n next.addClass('active')\n # Key: up\n else if code == 38\n if not activeElement.length\n $el.find('.watcher-single:last').addClass('active')\n else\n prev = activeElement.prev('.watcher-single')\n\n if prev.length\n activeElement.removeClass('active')\n prev.addClass('active')\n\n init: ($el) ->\n @stop()\n docEl = angular.element(document)\n docEl.on \"keydown.keyboard-navigation\", (event) =>\n code = if event.keyCode then event.keyCode else event.which\n if code == 40 || code == 38 || code == 13\n event.preventDefault()\n @.dispatch($el, code)\n\nmodule.service(\"lightboxKeyboardNavigationService\", LightboxKeyboardNavigationService)\n\n\n#############################################################################\n## Generic Lighthbox Directive\n#############################################################################\n\n# This adds generic behavior to all blocks with lightbox class like\n# close button event handlers.\n\nLightboxDirective = (lightboxService) ->\n link = ($scope, $el, $attrs) ->\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n return {restrict: \"C\", link: link}\n\nmodule.directive(\"lightbox\", [\"lightboxService\", LightboxDirective])\n\n#############################################################################\n## Block Lightbox Directive\n#############################################################################\n\n# Issue/Userstory blocking message lightbox directive.\n\nBlockLightboxDirective = ($rootscope, $tgrepo, $confirm, lightboxService, $loading, $qqueue, $translate) ->\n link = ($scope, $el, $attrs, $model) ->\n title = $translate.instant($attrs.title)\n $el.find(\"h2.title\").text(title)\n\n unblock = $qqueue.bindAdd (item, finishCallback) =>\n promise = $tgrepo.save(item)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n $model.$setViewValue(item)\n finishCallback()\n\n promise.then null, ->\n $confirm.notify(\"error\")\n item.revert()\n $model.$setViewValue(item)\n\n promise.finally ->\n finishCallback()\n\n return promise\n\n block = $qqueue.bindAdd (item) =>\n $model.$setViewValue(item)\n\n currentLoading = $loading()\n .target($el.find(\".button-green\"))\n .start()\n\n promise = $tgrepo.save($model.$modelValue)\n promise.then ->\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $confirm.notify(\"error\")\n item.revert()\n $model.$setViewValue(item)\n\n promise.finally ->\n currentLoading.finish()\n lightboxService.close($el)\n\n $scope.$on \"block\", ->\n $el.find(\".reason\").val($model.$modelValue.blocked_note)\n lightboxService.open($el)\n\n $scope.$on \"unblock\", (event, model, finishCallback) =>\n item = $model.$modelValue.clone()\n item.is_blocked = false\n item.blocked_note = \"\"\n\n unblock(item, finishCallback)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $el.on \"click\", \".button-green\", (event) ->\n event.preventDefault()\n\n item = $model.$modelValue.clone()\n item.is_blocked = true\n item.blocked_note = $el.find(\".reason\").val()\n\n block(item)\n\n return {\n templateUrl: \"common/lightbox/lightbox-block.html\"\n link: link\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgLbBlock\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"lightboxService\", \"$tgLoading\", \"$tgQqueue\", \"$translate\", BlockLightboxDirective])\n\n\n#############################################################################\n## Generic Lightbox Blocking-Message Input Directive\n#############################################################################\n\nBlockingMessageInputDirective = ($log, $template, $compile) ->\n template = $template.get(\"common/lightbox/lightbox-blocking-message-input.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n if not $attrs.watch\n return $log.error \"No watch attribute on tg-blocking-message-input directive\"\n\n $scope.$watch $attrs.watch, (value) ->\n if value is not undefined and value == true\n $el.find(\".blocked-note\").removeClass(\"hidden\")\n else\n $el.find(\".blocked-note\").addClass(\"hidden\")\n\n templateFn = ($el, $attrs) ->\n return template({ngmodel: $attrs.ngModel})\n\n return {\n template: templateFn\n link: link\n require: \"ngModel\"\n restrict: \"EA\"\n }\n\nmodule.directive(\"tgBlockingMessageInput\", [\"$log\", \"$tgTemplate\", \"$compile\", BlockingMessageInputDirective])\n\n\n#############################################################################\n## Create/Edit Userstory Lightbox Directive\n#############################################################################\n\nCreateEditUserstoryDirective = ($repo, $model, $rs, $rootScope, lightboxService, $loading, $translate) ->\n link = ($scope, $el, attrs) ->\n $scope.isNew = true\n\n $scope.$on \"usform:new\", (ctx, projectId, status, statusList) ->\n $scope.isNew = true\n $scope.usStatusList = statusList\n\n $scope.us = $model.make_model(\"userstories\", {\n project: projectId\n points : {}\n status: status\n is_archived: false\n tags: []\n })\n\n # Update texts for creation\n $el.find(\".button-green\").html($translate.instant(\"COMMON.CREATE\"))\n $el.find(\".title\").html($translate.instant(\"LIGHTBOX.CREATE_EDIT_US.NEW_US\"))\n $el.find(\".tag-input\").val(\"\")\n\n $el.find(\".blocked-note\").addClass(\"hidden\")\n $el.find(\"label.blocked\").removeClass(\"selected\")\n $el.find(\"label.team-requirement\").removeClass(\"selected\")\n $el.find(\"label.client-requirement\").removeClass(\"selected\")\n\n lightboxService.open($el)\n\n $scope.$on \"usform:edit\", (ctx, us) ->\n $scope.us = us\n $scope.isNew = false\n\n # Update texts for edition\n $el.find(\".button-green\").html($translate.instant(\"COMMON.SAVE\"))\n $el.find(\".title\").html($translate.instant(\"LIGHTBOX.CREATE_EDIT_US.EDIT_US\"))\n $el.find(\".tag-input\").val(\"\")\n\n # Update requirement info (team, client or blocked)\n if us.is_blocked\n $el.find(\".blocked-note\").removeClass(\"hidden\")\n $el.find(\"label.blocked\").addClass(\"selected\")\n else\n $el.find(\".blocked-note\").addClass(\"hidden\")\n $el.find(\"label.blocked\").removeClass(\"selected\")\n\n if us.team_requirement\n $el.find(\"label.team-requirement\").addClass(\"selected\")\n else\n $el.find(\"label.team-requirement\").removeClass(\"selected\")\n if us.client_requirement\n $el.find(\"label.client-requirement\").addClass(\"selected\")\n else\n $el.find(\"label.client-requirement\").removeClass(\"selected\")\n\n lightboxService.open($el)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n if $scope.isNew\n promise = $repo.create(\"userstories\", $scope.us)\n broadcastEvent = \"usform:new:success\"\n else\n promise = $repo.save($scope.us)\n broadcastEvent = \"usform:edit:success\"\n\n promise.then (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $rootScope.$broadcast(broadcastEvent, data)\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $scope.us.revert()\n lightboxService.close($el)\n\n $el.keydown (event) ->\n code = if event.keyCode then event.keyCode else event.which\n if code == 27\n lightboxService.close($el)\n $scope.$apply ->\n $scope.us.revert()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateEditUserstory\", [\n \"$tgRepo\",\n \"$tgModel\",\n \"$tgResources\",\n \"$rootScope\",\n \"lightboxService\",\n \"$tgLoading\",\n \"$translate\",\n CreateEditUserstoryDirective\n])\n\n\n#############################################################################\n## Creare Bulk Userstories Lightbox Directive\n#############################################################################\n\nCreateBulkUserstoriesDirective = ($repo, $rs, $rootscope, lightboxService, $loading) ->\n link = ($scope, $el, attrs) ->\n $scope.$on \"usform:bulk\", (ctx, projectId, status) ->\n $scope.new = {\n projectId: projectId\n statusId: status\n bulk: \"\"\n }\n lightboxService.open($el)\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley({onlyOneErrorElement: true})\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $rs.userstories.bulkCreate($scope.new.projectId, $scope.new.statusId, $scope.new.bulk)\n promise.then (result) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"usform:bulk:success\", result)\n lightboxService.close($el)\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateBulkUserstories\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n \"lightboxService\",\n \"$tgLoading\",\n CreateBulkUserstoriesDirective\n])\n\n\n#############################################################################\n## AssignedTo Lightbox Directive\n#############################################################################\n\nAssignedToLightboxDirective = (lightboxService, lightboxKeyboardNavigationService, $template, $compile) ->\n link = ($scope, $el, $attrs) ->\n selectedUser = null\n selectedItem = null\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true)\n\n normalizeString = (string) ->\n normalizedString = string\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\")\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\")\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\")\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\")\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\")\n return normalizedString\n\n filterUsers = (text, user) ->\n username = user.full_name_display.toUpperCase()\n username = normalizeString(username)\n text = text.toUpperCase()\n text = normalizeString(text)\n return _.contains(username, text)\n\n render = (selected, text) ->\n users = _.clone($scope.activeUsers, true)\n users = _.reject(users, {\"id\": selected.id}) if selected?\n users = _.filter(users, _.partial(filterUsers, text)) if text?\n\n ctx = {\n selected: selected\n users: _.first(users, 5)\n showMore: users.length > 5\n }\n\n html = usersTemplate(ctx)\n html = $compile(html)($scope)\n\n $el.find(\".assigned-to-list\").html(html)\n\n closeLightbox = () ->\n lightboxKeyboardNavigationService.stop()\n lightboxService.close($el)\n\n $scope.$on \"assigned-to:add\", (ctx, item) ->\n selectedItem = item\n assignedToId = item.assigned_to\n selectedUser = $scope.usersById[assignedToId]\n\n render(selectedUser)\n lightboxService.open($el).then ->\n $el.find('input').focus()\n lightboxKeyboardNavigationService.init($el)\n\n $scope.$watch \"usersSearch\", (searchingText) ->\n if searchingText?\n render(selectedUser, searchingText)\n $el.find('input').focus()\n\n $el.on \"click\", \".user-list-single\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.$broadcast(\"assigned-to:added\", target.data(\"user-id\"), selectedItem)\n $scope.usersSearch = null\n\n $el.on \"click\", \".remove-assigned-to\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.usersSearch = null\n $scope.$broadcast(\"assigned-to:added\", null, selectedItem)\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.usersSearch = null\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n templateUrl: \"common/lightbox/lightbox-assigned-to.html\"\n link:link\n }\n\n\nmodule.directive(\"tgLbAssignedto\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", AssignedToLightboxDirective])\n\n\n#############################################################################\n## Watchers Lightbox directive\n#############################################################################\n\nWatchersLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile) ->\n link = ($scope, $el, $attrs) ->\n selectedItem = null\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true)\n\n # Get prefiltered users by text\n # and without now watched users.\n getFilteredUsers = (text=\"\") ->\n _filterUsers = (text, user) ->\n if selectedItem && _.find(selectedItem.watchers, (x) -> x == user.id)\n return false\n\n username = user.full_name_display.toUpperCase()\n text = text.toUpperCase()\n return _.contains(username, text)\n\n users = _.clone($scope.activeUsers, true)\n users = _.filter(users, _.partial(_filterUsers, text))\n return users\n\n # Render the specific list of users.\n render = (users) ->\n ctx = {\n selected: false\n users: _.first(users, 5)\n showMore: users.length > 5\n }\n\n html = usersTemplate(ctx)\n html = $compile(html)($scope)\n $el.find(\".ticket-watchers\").html(html)\n\n closeLightbox = () ->\n lightboxKeyboardNavigationService.stop()\n lightboxService.close($el)\n\n $scope.$on \"watcher:add\", (ctx, item) ->\n selectedItem = item\n\n users = getFilteredUsers()\n render(users)\n\n lightboxService.open($el).then ->\n $el.find(\"input\").focus()\n lightboxKeyboardNavigationService.init($el)\n\n $scope.$watch \"usersSearch\", (searchingText) ->\n if not searchingText?\n return\n\n users = getFilteredUsers(searchingText)\n render(users)\n $el.find(\"input\").focus()\n\n $el.on \"click\", \".user-list-single\", debounce 2000, (event) ->\n closeLightbox()\n\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n $scope.$apply ->\n $scope.usersSearch = null\n $scope.$broadcast(\"watcher:added\", target.data(\"user-id\"))\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n\n closeLightbox()\n\n $scope.$apply ->\n $scope.usersSearch = null\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n templateUrl: \"common/lightbox/lightbox-users.html\"\n link:link\n }\n\nmodule.directive(\"tgLbWatchers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", WatchersLightboxDirective])\n\n\n#############################################################################\n## Attachment Preview Lighbox\n#############################################################################\n\nAttachmentPreviewLightboxDirective = ($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile) ->\n link = ($scope, $el, attrs) ->\n template = $template.get(\"common/lightbox/lightbox-attachment-preview.html\", true)\n\n $scope.$on \"attachment:preview\", (event, attachment) ->\n lightboxService.open($el)\n render(attachment)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n render = (attachment) ->\n ctx = {\n url: attachment.url,\n title: attachment.description,\n name: attachment.name\n }\n\n html = template(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n return {\n link: link\n }\n\nmodule.directive(\"tgLbAttachmentPreview\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", AttachmentPreviewLightboxDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n# Copyright (C) 2014-2015 Juan Francisco Alcántara \n# Copyright (C) 2014-2015 Alejandro Alonso \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/loader.coffee\n###\n\n# FIXME: this code not follows any style and any good practices on coffeescript\n# and it should be rewritten in coffeescript style classes.\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaCommon\")\n\nLoaderDirective = (tgLoader, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n tgLoader.onStart () ->\n $(document.body).addClass(\"loader-active\")\n $el.addClass(\"active\")\n\n tgLoader.onEnd () ->\n $(document.body).removeClass(\"loader-active\")\n $el.removeClass(\"active\")\n\n return {\n link: link\n }\n\nmodule.directive(\"tgLoader\", [\"tgLoader\", \"$rootScope\", LoaderDirective])\n\nLoader = ($rootscope) ->\n config = {\n minTime: 300\n }\n\n open = false\n startLoadTime = 0\n requestCount = 0\n lastResponseDate = 0\n\n pageLoaded = (force = false) ->\n if startLoadTime\n timeoutValue = 0\n\n if !force\n endTime = new Date().getTime()\n diff = endTime - startLoadTime\n\n if diff < config.minTime\n timeoutValue = config.minTime - diff\n\n timeout timeoutValue, ->\n $rootscope.$broadcast(\"loader:end\")\n open = false\n window.prerenderReady = true # Needed by Prerender Server\n\n startLoadTime = 0\n requestCount = 0\n lastResponseDate = 0\n\n autoClose = () ->\n intervalAuto = setInterval (() ->\n if lastResponseDate && requestCount == 0\n pageLoaded()\n\n clearInterval(intervalAuto)\n ), 50\n\n start = () ->\n startLoadTime = new Date().getTime()\n $rootscope.$broadcast(\"loader:start\")\n open = true\n\n return {\n pageLoaded: pageLoaded\n start: (auto=false) ->\n if !open\n start()\n autoClose() if auto\n onStart: (fn) ->\n $rootscope.$on(\"loader:start\", fn)\n\n onEnd: (fn) ->\n $rootscope.$on(\"loader:end\", fn)\n\n logRequest: () ->\n requestCount++\n\n logResponse: () ->\n requestCount--\n lastResponseDate = new Date().getTime()\n }\n\n\nLoader.$inject = [\"$rootScope\"]\n\nmodule.factory(\"tgLoader\", Loader)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/lightboxes.coffee\n###\n\nmodule = angular.module(\"taigaCommon\")\n\nTgLoadingService = ($compile) ->\n spinner = \"loading...\"\n\n return () ->\n service = {\n settings: {\n target: null,\n scope: null,\n classes: []\n timeout: 0,\n template: null\n },\n target: (target) ->\n service.settings.target = target\n\n return service\n scope: (scope) ->\n service.settings.scope = scope\n\n return service\n template: (template) ->\n service.settings.template = template\n\n return service\n removeClasses: (classess...) ->\n service.settings.classes = classess\n\n return service\n timeout: (timeout) ->\n service.settings.timeout = timeout\n\n return service\n\n start: ->\n target = service.settings.target\n service.settings.classes.map (className) -> target.removeClass(className)\n\n # The loader is shown after that quantity of milliseconds\n timeoutId = setTimeout (->\n if not target.hasClass('loading')\n if !service.settings.template\n service.settings.template = target.html()\n\n target.addClass('loading')\n\n target.html(spinner)\n ), service.settings.timeout\n\n service.settings.timeoutId = timeoutId\n\n return service\n\n finish: ->\n target = service.settings.target\n timeoutId = service.settings.timeoutId\n\n if timeoutId\n clearTimeout(timeoutId)\n\n removeClasses = service.settings.classes\n removeClasses.map (className) -> service.settings.target.addClass(className)\n\n target.html(service.settings.template)\n target.removeClass('loading')\n\n if service.settings.scope\n $compile(target.contents())(service.settings.scope)\n\n return service\n }\n\n return service\n\nTgLoadingService.$inject = [\n \"$compile\"\n]\n\nmodule.factory(\"$tgLoading\", TgLoadingService)\n\nLoadingDirective = ($loading) ->\n link = ($scope, $el, attr) ->\n currentLoading = null\n template = $el.html()\n\n $scope.$watch attr.tgLoading, (showLoading) =>\n if showLoading\n currentLoading = $loading()\n .target($el)\n .timeout(50)\n .template(template)\n .scope($scope)\n .start()\n else if currentLoading\n currentLoading.finish()\n\n return {\n link:link\n }\n\nmodule.directive(\"tgLoading\", [\"$tgLoading\", LoadingDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/popovers.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaCommon\")\n\n#############################################################################\n## UserStory status Directive (popover for change status)\n#############################################################################\n\nUsStatusDirective = ($repo, $template) ->\n ###\n Print the status of a US and a popover to change it.\n - tg-us-status: The user story\n - on-update: Method call after US is updated\n\n Example:\n\n div.status(tg-us-status=\"us\" on-update=\"ctrl.loadSprintState()\")\n a.us-status(href=\"\", title=\"Status Name\")\n\n NOTE: This directive need 'usStatusById' and 'project'.\n ###\n template = $template.get(\"common/popover/popover-us-status.html\", true)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n render = (us) ->\n usStatusDomParent = $el.find(\".us-status\")\n usStatusDom = $el.find(\".us-status .us-status-bind\")\n usStatusById = $scope.usStatusById\n\n if usStatusById[us.status]\n usStatusDom.text(usStatusById[us.status].name)\n usStatusDomParent.css(\"color\", usStatusById[us.status].color)\n\n $el.on \"click\", \".us-status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", debounce 2000, (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n target = angular.element(event.currentTarget)\n\n us = $scope.$eval($attrs.tgUsStatus)\n us.status = target.data(\"status-id\")\n render(us)\n\n $el.find(\".pop-status\").popover().close()\n\n $scope.$apply () ->\n $repo.save(us).then ->\n $scope.$eval($attrs.onUpdate)\n\n\n $scope.$on(\"userstories:loaded\", -> render($scope.$eval($attrs.tgUsStatus)))\n $scope.$on(\"$destroy\", -> $el.off())\n\n # Bootstrap\n us = $scope.$eval($attrs.tgUsStatus)\n render(us)\n\n bindOnce $scope, \"project\", (project) ->\n html = template({\"statuses\": project.us_statuses})\n $el.append(html)\n\n # If the user has not enough permissions the click events are unbinded\n if $scope.project.my_permissions.indexOf(\"modify_us\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n\n return {link: link}\n\nmodule.directive(\"tgUsStatus\", [\"$tgRepo\", \"$tgTemplate\", UsStatusDirective])\n\n#############################################################################\n## Related Task Status Directive\n#############################################################################\n\nRelatedTaskStatusDirective = ($repo, $template) ->\n ###\n Print the status of a related task and a popover to change it.\n - tg-related-task-status: The related task\n - on-update: Method call after US is updated\n\n Example:\n\n div.status(tg-related-task-status=\"task\" on-update=\"ctrl.loadSprintState()\")\n a.task-status(href=\"\", title=\"Status Name\")\n\n NOTE: This directive need 'taskStatusById' and 'project'.\n ###\n selectionTemplate = $template.get(\"common/popover/popover-related-task-status.html\", true)\n\n updateTaskStatus = ($el, task, taskStatusById) ->\n taskStatusDomParent = $el.find(\".us-status\")\n taskStatusDom = $el.find(\".task-status .task-status-bind\")\n\n if taskStatusById[task.status]\n taskStatusDom.text(taskStatusById[task.status].name)\n taskStatusDomParent.css('color', taskStatusById[task.status].color)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n task = $scope.$eval($attrs.tgRelatedTaskStatus)\n notAutoSave = $scope.$eval($attrs.notAutoSave)\n autoSave = !notAutoSave\n\n $el.on \"click\", \".task-status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n $el.find(\".pop-status\").popover().open()\n\n # pop = $el.find(\".pop-status\")\n # popoverService.open(pop)\n\n $el.on \"click\", \".status\", debounce 2000, (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n task.status = target.data(\"status-id\")\n $el.find(\".pop-status\").popover().close()\n updateTaskStatus($el, task, $scope.taskStatusById)\n\n if autoSave\n $scope.$apply () ->\n $repo.save(task).then ->\n $scope.$eval($attrs.onUpdate)\n $scope.$emit(\"related-tasks:status-changed\")\n\n taiga.bindOnce $scope, \"project\", (project) ->\n $el.append(selectionTemplate({ 'statuses': project.task_statuses }))\n updateTaskStatus($el, task, $scope.taskStatusById)\n\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_task\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgRelatedTaskStatus\", [\"$tgRepo\", \"$tgTemplate\", RelatedTaskStatusDirective])\n\n#############################################################################\n## jQuery plugin for Popover\n#############################################################################\n\n$.fn.popover = () ->\n $el = @\n\n isVisible = () =>\n $el.css({\n \"display\": \"block\",\n \"visibility\": \"hidden\"\n })\n\n docViewTop = $(window).scrollTop()\n docViewBottom = docViewTop + $(window).height()\n\n docViewWidth = $(window).width()\n docViewRight = docViewWidth\n docViewLeft = 0\n\n elemTop = $el.offset().top\n elemBottom = elemTop + $el.height()\n\n elemWidth = $el.width()\n elemLeft = $el.offset().left\n elemRight = $el.offset().left + elemWidth\n\n $el.css({\n \"display\": \"none\",\n \"visibility\": \"visible\"\n })\n\n return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop) && (elemLeft >= docViewLeft) && (elemRight <= docViewRight))\n\n closePopover = (onClose) =>\n if onClose then onClose.call($el)\n\n $el.fadeOut () =>\n $el\n .removeClass(\"active\")\n .removeClass(\"fix\")\n\n $el.off(\"popup:close\")\n\n\n closeAll = () =>\n $(\".popover.active\").each () ->\n $(this).trigger(\"popup:close\")\n\n open = (onClose) =>\n if $el.hasClass(\"active\")\n close()\n else\n closeAll()\n\n if !isVisible()\n $el.addClass(\"fix\")\n\n $el.fadeIn () =>\n $el.addClass(\"active\")\n $(document.body).off(\"popover\")\n\n $(document.body).one \"click.popover\", () =>\n closeAll()\n\n $el.on \"popup:close\", (e) => closePopover(onClose)\n\n close = () =>\n $el.trigger(\"popup:close\")\n\n return {open: open, close: close, closeAll: closeAll}\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/raven-logger.coffee\n###\n\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaCommon\")\n\nExceptionHandlerFactory = ($log, @config) ->\n ravenConfig = @config.get(\"ravenConfig\", null)\n if ravenConfig\n $log.debug \"Using the RavenJS exception handler.\"\n Raven.config(ravenConfig).install()\n return (exception, cause) ->\n $log.error.apply($log, arguments)\n Raven.captureException(exception)\n\n else\n $log.debug \"Using the default logging exception handler.\"\n return (exception, cause) ->\n $log.error.apply($log, arguments)\n\nmodule.factory(\"$exceptionHandler\", [\"$log\", \"$tgConfig\", ExceptionHandlerFactory])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/tags.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaCommon\")\n\n# Directive that parses/format tags inputfield.\n\nTagsDirective = ->\n formatter = (v) ->\n if _.isArray(v)\n return v.join(\", \")\n return \"\"\n\n parser = (v) ->\n return [] if not v\n result = _(v.split(\",\")).map((x) -> _.str.trim(x))\n\n return result.value()\n\n link = ($scope, $el, $attrs, $ctrl) ->\n $ctrl.$formatters.push(formatter)\n $ctrl.$parsers.push(parser)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n require: \"ngModel\"\n link: link\n }\n\nmodule.directive(\"tgTags\", TagsDirective)\n\n\nColorizeTagsDirective = ->\n templates = {\n backlog: _.template(\"\"\"\n <% _.each(tags, function(tag) { %>\n \"><%- tag.name %>\n <% }) %>\n \"\"\")\n kanban: _.template(\"\"\"\n <% _.each(tags, function(tag) { %>\n \" title=\"<%- tag.name %>\" />\n <% }) %>\n \"\"\")\n taskboard: _.template(\"\"\"\n <% _.each(tags, function(tag) { %>\n \" title=\"<%- tag.name %>\" />\n <% }) %>\n \"\"\")\n }\n\n link = ($scope, $el, $attrs, $ctrl) ->\n render = (srcTags) ->\n template = templates[$attrs.tgColorizeTagsType]\n srcTags.sort()\n tags = _.map srcTags, (tag) ->\n color = $scope.project.tags_colors[tag]\n return {name: tag, color: color}\n\n html = template({tags: tags})\n $el.html(html)\n\n $scope.$watch $attrs.tgColorizeTags, (tags) ->\n render(tags) if tags?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgColorizeTags\", ColorizeTagsDirective)\n\n\n#############################################################################\n## TagLine Directive (for Lightboxes)\n#############################################################################\n\nLbTagLineDirective = ($rs, $template, $compile) ->\n ENTER_KEY = 13\n COMMA_KEY = 188\n\n templateTags = $template.get(\"common/tag/lb-tag-line-tags.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n ## Render\n renderTags = (tags, tagsColors) ->\n ctx = {\n tags: _.map(tags, (t) -> {name: t, color: tagsColors[t]})\n }\n\n _.map ctx.tags, (tag) =>\n if tag.color\n tag.style = \"border-left: 5px solid #{tag.color}\"\n\n html = $compile(templateTags(ctx))($scope)\n $el.find(\"div.tags-container\").html(html)\n\n showSaveButton = -> $el.find(\".save\").removeClass(\"hidden\")\n hideSaveButton = -> $el.find(\".save\").addClass(\"hidden\")\n\n resetInput = ->\n $el.find(\"input\").val(\"\")\n $el.find(\"input\").autocomplete(\"close\")\n\n ## Aux methods\n addValue = (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue, false)\n tags = [] if not tags?\n tags.push(value) if value not in tags\n\n $scope.$apply ->\n $model.$setViewValue(tags)\n\n hideSaveButton()\n\n deleteValue = (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue, false)\n tags = _.pull(tags, value)\n\n $scope.$apply ->\n $model.$setViewValue(tags)\n\n saveInputTag = () ->\n value = $el.find(\"input\").val()\n\n addValue(value)\n resetInput()\n\n removeInputLastCharacter = (input) =>\n inputValue = input.val()\n input.val inputValue.substring(0, inputValue.length - 1)\n\n ## Events\n $el.on \"keypress\", \"input\", (event) ->\n return if event.keyCode != ENTER_KEY\n event.preventDefault()\n\n $el.on \"keyup\", \"input\", (event) ->\n target = angular.element(event.currentTarget)\n\n if event.keyCode == ENTER_KEY\n saveInputTag()\n else if event.keyCode == COMMA_KEY\n removeInputLastCharacter(target)\n saveInputTag()\n else\n if target.val().length\n showSaveButton()\n else\n hideSaveButton()\n\n $el.on \"click\", \".save\", (event) ->\n event.preventDefault()\n saveInputTag()\n\n $el.on \"click\", \".icon-delete\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n value = target.siblings(\".tag-name\").text()\n deleteValue(value)\n\n bindOnce $scope, \"project\", (project) ->\n positioningFunction = (position, elements) ->\n menu = elements.element.element\n menu.css(\"width\", elements.target.width)\n menu.css(\"top\", position.top)\n menu.css(\"left\", position.left)\n\n $el.find(\"input\").autocomplete({\n source: _.keys(project.tags_colors)\n position: {\n my: \"left top\",\n using: positioningFunction\n }\n select: (event, ui) ->\n addValue(ui.item.value)\n ui.item.value = \"\"\n })\n\n $scope.$watch $attrs.ngModel, (tags) ->\n tagsColors = $scope.project?.tags_colors or []\n renderTags(tags, tagsColors)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link,\n require:\"ngModel\"\n templateUrl: \"common/tag/lb-tag-line.html\"\n }\n\nmodule.directive(\"tgLbTagLine\", [\"$tgResources\", \"$tgTemplate\", \"$compile\", LbTagLineDirective])\n\n\n#############################################################################\n## TagLine Directive (for detail pages)\n#############################################################################\n\nTagLineDirective = ($rootScope, $repo, $rs, $confirm, $qqueue, $template, $compile) ->\n ENTER_KEY = 13\n ESC_KEY = 27\n COMMA_KEY = 188\n\n templateTags = $template.get(\"common/tag/tags-line-tags.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n if $attrs.requiredPerm?\n return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1\n\n return true\n\n ## Render\n renderTags = (tags, tagsColors) ->\n ctx = {\n tags: _.map(tags, (t) -> {name: t, color: tagsColors[t]})\n isEditable: isEditable()\n }\n html = $compile(templateTags(ctx))($scope)\n $el.find(\"div.tags-container\").html(html)\n\n renderInReadModeOnly = ->\n $el.find(\".add-tag\").remove()\n $el.find(\"input\").remove()\n $el.find(\".save\").remove()\n\n showAddTagButton = -> $el.find(\".add-tag\").removeClass(\"hidden\")\n hideAddTagButton = -> $el.find(\".add-tag\").addClass(\"hidden\")\n\n showAddTagButtonText = -> $el.find(\".add-tag-text\").removeClass(\"hidden\")\n hideAddTagButtonText = -> $el.find(\".add-tag-text\").addClass(\"hidden\")\n\n showSaveButton = -> $el.find(\".save\").removeClass(\"hidden\")\n hideSaveButton = -> $el.find(\".save\").addClass(\"hidden\")\n\n showInput = -> $el.find(\"input\").removeClass(\"hidden\").focus()\n hideInput = -> $el.find(\"input\").addClass(\"hidden\").blur()\n resetInput = ->\n $el.find(\"input\").val(\"\")\n $el.find(\"input\").autocomplete(\"close\")\n\n ## Aux methods\n addValue = $qqueue.bindAdd (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue.tags, false)\n tags = [] if not tags?\n tags.push(value) if value not in tags\n\n model = $model.$modelValue.clone()\n model.tags = tags\n $model.$setViewValue(model)\n\n onSuccess = ->\n $rootScope.$broadcast(\"object:updated\")\n onError = ->\n $confirm.notify(\"error\")\n model.revert()\n $model.$setViewValue(model)\n $repo.save(model).then(onSuccess, onError)\n\n hideSaveButton()\n\n deleteValue = $qqueue.bindAdd (value) ->\n value = trim(value.toLowerCase())\n return if value.length == 0\n\n tags = _.clone($model.$modelValue.tags, false)\n tags = _.pull(tags, value)\n\n model = $model.$modelValue.clone()\n model.tags = tags\n $model.$setViewValue(model)\n\n onSuccess = ->\n $rootScope.$broadcast(\"object:updated\")\n onError = ->\n $confirm.notify(\"error\")\n model.revert()\n $model.$setViewValue(model)\n\n return $repo.save(model).then(onSuccess, onError)\n\n saveInputTag = () ->\n value = $el.find(\"input\").val()\n\n addValue(value)\n resetInput()\n\n removeInputLastCharacter = (input) =>\n inputValue = input.val()\n input.val inputValue.substring(0, inputValue.length - 1)\n\n ## Events\n $el.on \"keypress\", \"input\", (event) ->\n return if event.keyCode not in [ENTER_KEY, ESC_KEY]\n event.preventDefault()\n\n $el.on \"keyup\", \"input\", (event) ->\n target = angular.element(event.currentTarget)\n\n if event.keyCode == ENTER_KEY\n saveInputTag()\n else if event.keyCode == COMMA_KEY\n removeInputLastCharacter(target)\n saveInputTag()\n else if event.keyCode == ESC_KEY\n resetInput()\n hideInput()\n hideSaveButton()\n showAddTagButton()\n else\n if target.val().length\n showSaveButton()\n else\n hideSaveButton()\n\n $el.on \"click\", \".save\", (event) ->\n event.preventDefault()\n saveInputTag()\n\n $el.on \"click\", \".add-tag\", (event) ->\n event.preventDefault()\n hideAddTagButton()\n showInput()\n\n $el.on \"click\", \".icon-delete\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n value = target.siblings(\".tag-name\").text()\n\n deleteValue(value)\n\n bindOnce $scope, \"project.tags_colors\", (tags_colors) ->\n if not isEditable()\n renderInReadModeOnly()\n return\n\n showAddTagButton()\n\n positioningFunction = (position, elements) ->\n menu = elements.element.element\n menu.css(\"width\", elements.target.width)\n menu.css(\"top\", position.top)\n menu.css(\"left\", position.left)\n\n $el.find(\"input\").autocomplete({\n source: _.keys(tags_colors)\n position: {\n my: \"left top\",\n using: positioningFunction\n }\n select: (event, ui) ->\n addValue(ui.item.value)\n ui.item.value = \"\"\n })\n\n $scope.$watch $attrs.ngModel, (model) ->\n return if not model\n\n if model.tags?.length\n hideAddTagButtonText()\n else\n showAddTagButtonText()\n\n tagsColors = $scope.project?.tags_colors or []\n renderTags(model.tags, tagsColors)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link,\n require:\"ngModel\"\n templateUrl: \"common/tag/tag-line.html\"\n }\n\nmodule.directive(\"tgTagLine\", [\"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$tgQqueue\",\n \"$tgTemplate\", \"$compile\", TagLineDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/wisiwyg.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaCommon\")\n\n# How to test lists (-, *, 1.)\n# test it with text after & before the list\n# + is the cursor position\n\n# CASE 1\n# - aa+\n# --> enter\n# - aa\n# - +\n\n# CASE 1\n# - +\n# --> enter\n\n# +\n\n# CASE 3\n# - bb+cc\n# --> enter\n# - bb\n# - cc\n\n# CASE 3\n# +- aa\n# --> enter\n\n# - aa\n\n#############################################################################\n## WYSIWYG markitup editor directive\n#############################################################################\nMarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $translate) ->\n previewTemplate = $template.get(\"common/wysiwyg/wysiwyg-markitup-preview.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n element = angular.element($el)\n previewDomNode = $(\"
\", {class: \"preview\"})\n\n closePreviewMode = ->\n element.parents(\".markdown\").find(\".preview\").remove()\n element.parents(\".markItUp\").show()\n\n $scope.$on \"markdown-editor:submit\", ->\n closePreviewMode()\n\n preview = ->\n markdownDomNode = element.parents(\".markdown\")\n markItUpDomNode = element.parents(\".markItUp\")\n $rs.mdrender.render($scope.projectId, $model.$modelValue).then (data) ->\n html = previewTemplate({data: data.data})\n html = $compile(html)($scope)\n\n markdownDomNode.append(html)\n markItUpDomNode.hide()\n\n markdown = element.closest(\".markdown\")\n\n markdown.on \"mouseup.preview\", \".preview\", (event) ->\n event.preventDefault()\n target = angular.element(event.target)\n\n if !target.is('a') and $selectedText.get().length\n return\n\n markdown.off(\".preview\")\n closePreviewMode()\n\n setCaretPosition = (textarea, caretPosition) ->\n if textarea.createTextRange\n range = textarea.createTextRange()\n range.move(\"character\", caretPosition)\n range.select()\n\n else if textarea.selectionStart\n textarea.focus()\n textarea.setSelectionRange(caretPosition, caretPosition)\n\n # Calculate the scroll position\n totalLines = textarea.value.split(\"\\n\").length\n line = textarea.value[0..(caretPosition - 1)].split(\"\\n\").length\n scrollRelation = line / totalLines\n $el.scrollTop((scrollRelation * $el[0].scrollHeight) - ($el.height() / 2))\n\n addLine = (textarea, nline, replace) ->\n lines = textarea.value.split(\"\\n\")\n\n if replace\n lines[nline] = replace + lines[nline]\n else\n lines[nline] = \"\"\n\n cursorPosition = 0\n\n for line, key in lines\n cursorPosition += line.length + 1 || 1\n\n break if key == nline\n\n textarea.value = lines.join(\"\\n\")\n\n #return the new position\n if replace\n return cursorPosition - lines[nline].length + replace.length - 1\n else\n return cursorPosition\n\n prepareUrlFormatting = (markItUp) ->\n regex = /(<<<|>>>)/gi\n result = 0\n indices = []\n (indices.push(result.index)) while ( (result = regex.exec(markItUp.textarea.value)) )\n markItUp.donotparse = indices\n\n urlFormatting = (markItUp) ->\n regex = /<<>>/gi\n endIndex = 0\n loop\n result = regex.exec(markItUp.textarea.value)\n break if !result\n if result.index not in markItUp.donotparse\n endIndex = result.index\n break\n\n value = markItUp.textarea.value\n url = value.substring(startIndex, endIndex).replace('<<<', '').replace('>>>', '')\n url = url.replace('(', '%28').replace(')', '%29')\n url = url.replace('[', '%5B').replace(']', '%5D')\n value = value.substring(0, startIndex) + url + value.substring(endIndex+3, value.length)\n markItUp.textarea.value = value\n markItUp.donotparse = undefined\n\n markdownTitle = (markItUp, char) ->\n heading = \"\"\n n = $.trim(markItUp.selection or markItUp.placeHolder).length\n\n for i in [0..n-1]\n heading += char\n\n return \"\\n\"+heading+\"\\n\"\n\n renderMarkItUp = () ->\n markdownSettings =\n nameSpace: \"markdown\"\n onShiftEnter: {keepDefault:false, openWith:\"\\n\\n\"}\n onEnter:\n keepDefault: false,\n replaceWith: () ->\n # Allow textcomplete to intercept the enter key if the options list is displayed\n # @todo There doesn't seem to be a more graceful way to do this with the textcomplete API.\n if not $('.textcomplete-dropdown').is(':visible')\n \"\\n\"\n afterInsert: (data) ->\n lines = data.textarea.value.split(\"\\n\")\n # Detect if we are in this situation +- aa at the beginning if the textarea\n if data.caretPosition > 0\n cursorLine = data.textarea.value[0..(data.caretPosition - 1)].split(\"\\n\").length\n else\n cursorLine = 1\n\n newLineContent = data.textarea.value[data.caretPosition..].split(\"\\n\")[0]\n lastLine = lines[cursorLine - 1]\n\n # unordered list -\n match = lastLine.match /^(\\s*- ).*/\n\n if match\n emptyListItem = lastLine.match /^(\\s*)\\-\\s$/\n\n if emptyListItem\n nline = cursorLine - 1\n replace = null\n else\n nline = cursorLine\n replace = \"#{match[1]}\"\n\n markdownCaretPositon = addLine(data.textarea, nline, replace)\n\n # unordered list *\n match = lastLine.match /^(\\s*\\* ).*/\n\n if match\n emptyListItem = lastLine.match /^(\\s*\\* )$/\n\n if emptyListItem\n nline = cursorLine - 1\n replace = null\n else\n nline = cursorLine\n replace = \"#{match[1]}\"\n\n markdownCaretPositon = addLine(data.textarea, nline, replace)\n\n # ordered list\n match = lastLine.match /^(\\s*)(\\d+)\\.\\s/\n\n if match\n emptyListItem = lastLine.match /^(\\s*)(\\d+)\\.\\s$/\n\n if emptyListItem\n nline = cursorLine - 1\n replace = null\n else\n nline = cursorLine\n replace = \"#{match[1] + (parseInt(match[2], 10) + 1)}. \"\n\n markdownCaretPositon = addLine(data.textarea, nline, replace)\n\n setCaretPosition(data.textarea, markdownCaretPositon) if markdownCaretPositon\n\n markupSet: [\n {\n name: $translate.instant(\"COMMON.WYSIWYG.H1_BUTTON\")\n key: \"1\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.H1_SAMPLE_TEXT\")\n closeWith: (markItUp) -> markdownTitle(markItUp, \"=\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.H2_BUTTON\")\n key: \"2\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.H2_SAMPLE_TEXT\")\n closeWith: (markItUp) -> markdownTitle(markItUp, \"-\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.H3_BUTTON\")\n key: \"3\"\n openWith: \"### \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.H3_SAMPLE_TEXT\")\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.BOLD_BUTTON\")\n key: \"B\"\n openWith: \"**\"\n closeWith: \"**\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.BOLD_BUTTON_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT\")\n key: \"I\"\n openWith: \"_\"\n closeWith: \"_\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.ITALIC_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.STRIKE_BUTTON\")\n key: \"S\"\n openWith: \"~~\"\n closeWith: \"~~\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.STRIKE_SAMPLE_TEXT\")\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.BULLETED_LIST_BUTTON\")\n openWith: \"- \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.BULLETED_LIST_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.NUMERIC_LIST_BUTTON\")\n openWith: (markItUp) -> markItUp.line+\". \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.NUMERIC_LIST_SAMPLE_TEXT\")\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.PICTURE_BUTTON\")\n key: \"P\"\n openWith: \"![\"\n closeWith: '](<<<[![Url:!:http://]!]>>> \"[![Title]!]\")'\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.PICTURE_SAMPLE_TEXT\")\n beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp)\n afterInsert:(markItUp) -> urlFormatting(markItUp)\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.LINK_BUTTON\")\n key: \"L\"\n openWith: \"[\"\n closeWith: '](<<<[![Url:!:http://]!]>>> \"[![Title]!]\")'\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.LINK_SAMPLE_TEXT\")\n beforeInsert:(markItUp) -> prepareUrlFormatting(markItUp)\n afterInsert:(markItUp) -> urlFormatting(markItUp)\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.QUOTE_BLOCK_BUTTON\")\n openWith: \"> \"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.QUOTE_BLOCK_SAMPLE_TEXT\")\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.CODE_BLOCK_BUTTON\")\n openWith: \"```\\n\"\n placeHolder: $translate.instant(\"COMMON.WYSIWYG.CODE_BLOCK_SAMPLE_TEXT\")\n closeWith: \"\\n```\"\n },\n {\n separator: \"---------------\"\n },\n {\n name: $translate.instant(\"COMMON.WYSIWYG.PREVIEW_BUTTON\")\n call: preview\n className: \"preview-icon\"\n },\n ]\n afterInsert: (event) ->\n target = angular.element(event.textarea)\n $model.$setViewValue(target.val())\n\n element\n .markItUpRemove()\n .markItUp(markdownSettings)\n .textcomplete([\n # us, task, and issue autocomplete: #id or #\n {\n cache: true\n match: /(^|\\s)#([a-z0-9]+)$/i,\n search: (term, callback) ->\n term = taiga.slugify(term)\n\n searchTypes = ['issues', 'tasks', 'userstories']\n searchProps = ['ref', 'subject']\n\n filter = (item) =>\n for prop in searchProps\n if taiga.slugify(item[prop]).indexOf(term) >= 0\n return true\n return false\n\n $rs.search.do($scope.projectId, term).then (res) =>\n # ignore wikipages if they're the only results. can't exclude them in search\n if res.count < 1 or res.count == res.wikipages.length\n callback([])\n\n else\n for type in searchTypes\n if res[type] and res[type].length > 0\n callback(res[type].filter(filter), true)\n\n # must signal end of lists\n callback([])\n\n replace: (res) ->\n return \"$1\\##{res.ref} \"\n\n template: (res, term) ->\n return \"\\##{res.ref} - #{res.subject}\"\n }\n\n # username autocomplete: @username or @\n {\n cache: true\n match: /(^|\\s)@([a-z0-9\\-\\._]{2,})$/i\n search: (term, callback) ->\n username = taiga.slugify(term)\n searchProps = ['username', 'full_name', 'full_name_display']\n\n if $scope.project.members.length < 1\n callback([])\n\n else\n callback $scope.project.members.filter (user) =>\n for prop in searchProps\n if taiga.slugify(user[prop]).indexOf(username) >= 0\n return true\n return false\n\n replace: (user) ->\n return \"$1@#{user.username} \"\n\n template: (user) ->\n return \"#{user.username} - #{user.full_name_display}\"\n }\n\n # wiki pages autocomplete: [[slug or [[\n # if the search function was called with the 3rd param the regex\n # like the docs claim, we could combine this with the #123 search\n {\n cache: true\n match: /(^|\\s)\\[\\[([a-z0-9\\-]+)$/i\n search: (term, callback) ->\n term = taiga.slugify(term)\n\n $rs.search.do($scope.projectId, term).then (res) =>\n if res.count < 1\n callback([])\n\n if res.count < 1 or not res.wikipages or res.wikipages.length <= 0\n callback([])\n\n else\n callback res.wikipages.filter((page) =>\n return taiga.slugify(page['slug']).indexOf(term) >= 0\n ), true\n\n # must signal end of lists\n callback([])\n\n\n replace: (res) ->\n return \"$1[[#{res.slug}]]\"\n\n template: (res, term) ->\n return res.slug\n }\n ],\n {\n debounce: 200\n }\n )\n\n renderMarkItUp()\n\n unbind = $rootscope.$on \"$translateChangeEnd\", renderMarkItUp\n\n element.on \"keypress\", (event) ->\n $scope.$apply()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n unbind()\n\n return {link:link, require:\"ngModel\"}\n\nmodule.directive(\"tgMarkitup\", [\"$rootScope\", \"$tgResources\", \"$selectedText\", \"$tgTemplate\", \"$compile\",\n \"$translate\", MarkitupDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ndebounceLeading = @.taiga.debounceLeading\n\n\nmodule = angular.module(\"taigaBacklog\")\n\n#############################################################################\n## Issues Filters Directive\n#############################################################################\n\nBacklogFiltersDirective = ($q, $log, $location, $templates) ->\n template = $templates.get(\"backlog/filters.html\", true)\n templateSelected = $templates.get(\"backlog/filter-selected.html\", true)\n\n link = ($scope, $el, $attrs) ->\n currentFiltersType = ''\n\n $ctrl = $el.closest(\".wrapper\").controller()\n selectedFilters = []\n\n showFilters = (title, type) ->\n $el.find(\".filters-cats\").hide()\n $el.find(\".filter-list\").removeClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").removeClass(\"hidden\")\n $el.find(\"h2 a.subfilter span.title\").html(title)\n $el.find(\"h2 a.subfilter span.title\").prop(\"data-type\", type)\n\n currentFiltersType = getFiltersType()\n\n showCategories = ->\n $el.find(\".filters-cats\").show()\n $el.find(\".filter-list\").addClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").addClass(\"hidden\")\n\n initializeSelectedFilters = () ->\n showCategories()\n selectedFilters = []\n\n for name, values of $scope.filters\n for val in values\n selectedFilters.push(val) if val.selected\n\n renderSelectedFilters()\n\n renderSelectedFilters = ->\n _.map selectedFilters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = templateSelected({filters: selectedFilters})\n $el.find(\".filters-applied\").html(html)\n\n renderFilters = (filters) ->\n _.map filters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = template({filters:filters})\n $el.find(\".filter-list\").html(html)\n\n getFiltersType = () ->\n return $el.find(\"h2 a.subfilter span.title\").prop('data-type')\n\n reloadUserstories = () ->\n currentFiltersType = getFiltersType()\n\n $q.all([$ctrl.loadUserstories(), $ctrl.generateFilters()]).then () ->\n currentFilters = $scope.filters[currentFiltersType]\n renderFilters(_.reject(currentFilters, \"selected\"))\n\n toggleFilterSelection = (type, id) ->\n currentFiltersType = getFiltersType()\n\n filters = $scope.filters[type]\n filter = _.find(filters, {id: id})\n filter.selected = (not filter.selected)\n\n if filter.selected\n selectedFilters.push(filter)\n $scope.$apply ->\n $ctrl.selectFilter(type, id)\n else\n selectedFilters = _.reject selectedFilters, (selected) ->\n return filter.type == selected.type && filter.id == selected.id\n\n $ctrl.unselectFilter(type, id)\n\n renderSelectedFilters(selectedFilters)\n\n if type == currentFiltersType\n renderFilters(_.reject(filters, \"selected\"))\n\n reloadUserstories()\n\n selectQFilter = debounceLeading 100, (value) ->\n return if value is undefined\n\n if value.length == 0\n $ctrl.replaceFilter(\"q\", null)\n else\n $ctrl.replaceFilter(\"q\", value)\n\n reloadUserstories()\n\n $scope.$watch(\"filtersQ\", selectQFilter)\n\n ## Angular Watchers\n $scope.$on \"backlog:loaded\", (ctx) ->\n initializeSelectedFilters()\n\n $scope.$on \"filters:update\", (ctx) ->\n $ctrl.generateFilters().then () ->\n filters = $scope.filters[currentFiltersType]\n\n if currentFiltersType\n renderFilters(_.reject(filters, \"selected\"))\n\n ## Dom Event Handlers\n $el.on \"click\", \".filters-cats > ul > li > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n tags = $scope.filters[target.data(\"type\")]\n\n renderFilters(_.reject(tags, \"selected\"))\n showFilters(target.attr(\"title\"), target.data('type'))\n\n $el.on \"click\", \".filters-inner > .filters-step-cat > .breadcrumb > .back\", (event) ->\n event.preventDefault()\n showCategories()\n\n $el.on \"click\", \".filters-applied a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n id = target.data(\"id\")\n type = target.data(\"type\")\n toggleFilterSelection(type, id)\n\n $el.on \"click\", \".filter-list .single-filter\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n if target.hasClass(\"active\")\n target.removeClass(\"active\")\n else\n target.addClass(\"active\")\n\n id = target.data(\"id\")\n type = target.data(\"type\")\n toggleFilterSelection(type, id)\n\n return {link:link}\n\nmodule.directive(\"tgBacklogFilters\", [\"$q\", \"$log\", \"$tgLocation\", \"$tgTemplate\", BacklogFiltersDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaBacklog\")\n\n#############################################################################\n## Creare/Edit Sprint Lightbox Directive\n#############################################################################\n\nCreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, $translate) ->\n link = ($scope, $el, attrs) ->\n hasErrors = false\n createSprint = true\n\n resetSprint = () ->\n $scope.sprint = {\n project: null\n name: null\n estimated_start: null\n estimated_finish: null\n }\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n target = angular.element(event.currentTarget)\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n\n submitButton = $el.find(\".submit-button\")\n form = $el.find(\"form\").checksley()\n\n if not form.validate()\n hasErrors = true\n $el.find(\".last-sprint-name\").addClass(\"disappear\")\n return\n\n hasErrors = false\n newSprint = angular.copy($scope.sprint)\n broadcastEvent = null\n\n if createSprint\n newSprint.estimated_start = moment(newSprint.estimated_start, prettyDate).format(\"YYYY-MM-DD\")\n newSprint.estimated_finish = moment(newSprint.estimated_finish,prettyDate).format(\"YYYY-MM-DD\")\n promise = $repo.create(\"milestones\", newSprint)\n broadcastEvent = \"sprintform:create:success\"\n else\n newSprint.setAttr(\"estimated_start\",\n moment(newSprint.estimated_start, prettyDate).format(\"YYYY-MM-DD\"))\n newSprint.setAttr(\"estimated_finish\",\n moment(newSprint.estimated_finish, prettyDate).format(\"YYYY-MM-DD\"))\n promise = $repo.save(newSprint)\n broadcastEvent = \"sprintform:edit:success\"\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise.then (data) ->\n currentLoading.finish()\n $scope.sprintsCounter += 1 if createSprint\n $rootscope.$broadcast(broadcastEvent, data)\n\n lightboxService.close($el)\n\n promise.then null, (data) ->\n currentLoading.finish()\n\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"light-error\", data._error_message)\n else if data.__all__\n $confirm.notify(\"light-error\", data.__all__[0])\n\n remove = ->\n title = $translate.instant(\"LIGHTBOX.DELETE_SPRINT.TITLE\")\n message = $scope.sprint.name\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n onSuccess = ->\n askResponse.finish()\n $scope.milestonesCounter -= 1\n lightboxService.close($el)\n $rootscope.$broadcast(\"sprintform:remove:success\", $scope.sprint)\n\n onError = ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n $repo.remove($scope.sprint).then(onSuccess, onError)\n\n getLastSprint = ->\n openSprints = _.filter $scope.sprints, (sprint) ->\n return !sprint.closed\n\n sortedSprints = _.sortBy openSprints, (sprint) ->\n return moment(sprint.estimated_finish, 'YYYY-MM-DD').format('X')\n\n return sortedSprints[sortedSprints.length - 1]\n\n $scope.$on \"sprintform:create\", (event, projectId) ->\n resetSprint()\n\n form = $el.find(\"form\").checksley()\n form.reset()\n\n createSprint = true\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n $scope.sprint.project = projectId\n $scope.sprint.name = null\n $scope.sprint.slug = null\n\n lastSprint = getLastSprint()\n\n estimatedStart = moment()\n\n if lastSprint\n estimatedStart = moment(lastSprint.estimated_finish)\n else if $scope.sprint.estimated_start\n estimatedStart = moment($scope.sprint.estimated_start)\n\n $scope.sprint.estimated_start = estimatedStart.format(prettyDate)\n\n estimatedFinish = moment().add(2, \"weeks\")\n\n if lastSprint\n estimatedFinish = moment(lastSprint.estimated_finish).add(2, \"weeks\")\n else if $scope.sprint.estimated_finish\n estimatedFinish = moment($scope.sprint.estimated_finish)\n\n $scope.sprint.estimated_finish = estimatedFinish.format(prettyDate)\n\n lastSprintNameDom = $el.find(\".last-sprint-name\")\n if lastSprint?.name?\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME\", {\n lastSprint: lastSprint.name})\n lastSprintNameDom.html(text)\n\n $el.find(\".delete-sprint\").addClass(\"hidden\")\n\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.TITLE\")\n $el.find(\".title\").text(text)\n\n text = $translate.instant(\"COMMON.CREATE\")\n $el.find(\".button-green\").text(text)\n\n lightboxService.open($el)\n $el.find(\".sprint-name\").focus()\n $el.find(\".last-sprint-name\").removeClass(\"disappear\")\n\n $scope.$on \"sprintform:edit\", (ctx, sprint) ->\n resetSprint()\n\n createSprint = false\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n\n $scope.$apply ->\n $scope.sprint = sprint\n $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format(prettyDate)\n $scope.sprint.estimated_finish = moment($scope.sprint.estimated_finish).format(prettyDate)\n\n $el.find(\".delete-sprint\").removeClass(\"hidden\")\n\n editSprint = $translate.instant(\"BACKLOG.EDIT_SPRINT\")\n $el.find(\".title\").text(editSprint)\n\n save = $translate.instant(\"COMMON.SAVE\")\n $el.find(\".button-green\").text(save)\n\n lightboxService.open($el)\n $el.find(\".sprint-name\").focus().select()\n $el.find(\".last-sprint-name\").addClass(\"disappear\")\n\n $el.on \"keyup\", \".sprint-name\", (event) ->\n if $el.find(\".sprint-name\").val().length > 0 or hasErrors\n $el.find(\".last-sprint-name\").addClass(\"disappear\")\n else\n $el.find(\".last-sprint-name\").removeClass(\"disappear\")\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \".delete-sprint .icon-delete\", (event) ->\n event.preventDefault()\n remove()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n resetSprint()\n\n return {link: link}\n\n\nmodule.directive(\"tgLbCreateEditSprint\", [\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$rootScope\",\n \"lightboxService\"\n \"$tgLoading\",\n \"$translate\",\n CreateEditSprint\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\nbindMethods = @.taiga.bindMethods\ngenerateHash = @.taiga.generateHash\n\nmodule = angular.module(\"taigaBacklog\")\n\n#############################################################################\n## Backlog Controller\n#############################################################################\n\nclass BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\",\n \"$tgLoading\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q,\n @location, @appMetaService, @navUrls, @events, @analytics, @translate, @loading) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"BACKLOG.SECTION_NAME\")\n @showTags = false\n @activeFilters = false\n @scope.showGraphPlaceholder = null\n\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"BACKLOG.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"BACKLOG.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n if @rs.userstories.getShowTags(@scope.projectId)\n @showTags = true\n\n @scope.$broadcast(\"showTags\", @showTags)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n initializeEventHandlers: ->\n @scope.$on \"usform:bulk:success\", =>\n @.loadUserstories()\n @.loadProjectStats()\n @analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on backlog\", 1)\n\n @scope.$on \"sprintform:create:success\", =>\n @.loadSprints()\n @.loadProjectStats()\n @analytics.trackEvent(\"sprint\", \"create\", \"create sprint on backlog\", 1)\n\n @scope.$on \"usform:new:success\", =>\n @.loadUserstories()\n @.loadProjectStats()\n\n @rootscope.$broadcast(\"filters:update\")\n @analytics.trackEvent(\"userstory\", \"create\", \"create userstory on backlog\", 1)\n\n @scope.$on \"sprintform:edit:success\", =>\n @.loadProjectStats()\n\n @scope.$on \"sprintform:remove:success\", (event, sprint) =>\n @.loadSprints()\n @.loadProjectStats()\n @.loadUserstories()\n\n if sprint.closed\n @.loadClosedSprints()\n\n @rootscope.$broadcast(\"filters:update\")\n\n @scope.$on \"usform:edit:success\", =>\n @.loadUserstories()\n @rootscope.$broadcast(\"filters:update\")\n\n @scope.$on(\"sprint:us:move\", @.moveUs)\n @scope.$on(\"sprint:us:moved\", @.loadSprints)\n @scope.$on(\"sprint:us:moved\", @.loadProjectStats)\n\n @scope.$on(\"backlog:load-closed-sprints\", @.loadClosedSprints)\n @scope.$on(\"backlog:unload-closed-sprints\", @.unloadClosedSprints)\n\n initializeSubscription: ->\n routingKey1 = \"changes.project.#{@scope.projectId}.userstories\"\n @events.subscribe @scope, routingKey1, (message) =>\n @.loadUserstories()\n @.loadSprints()\n\n routingKey2 = \"changes.project.#{@scope.projectId}.milestones\"\n @events.subscribe @scope, routingKey2, (message) =>\n @.loadSprints()\n\n toggleShowTags: ->\n @scope.$apply =>\n @showTags = !@showTags\n @rs.userstories.storeShowTags(@scope.projectId, @showTags)\n\n toggleActiveFilters: ->\n @activeFilters = !@activeFilters\n\n loadProjectStats: ->\n return @rs.projects.stats(@scope.projectId).then (stats) =>\n @scope.stats = stats\n totalPoints = if stats.total_points then stats.total_points else stats.defined_points\n\n if totalPoints\n @scope.stats.completedPercentage = Math.round(100 * stats.closed_points / totalPoints)\n else\n @scope.stats.completedPercentage = 0\n\n @scope.showGraphPlaceholder = !(stats.total_points? && stats.total_milestones?)\n return stats\n\n unloadClosedSprints: ->\n @scope.$apply =>\n @scope.closedSprints = []\n @rootscope.$broadcast(\"closed-sprints:reloaded\", [])\n\n loadClosedSprints: ->\n params = {closed: true}\n return @rs.sprints.list(@scope.projectId, params).then (result) =>\n sprints = result.milestones\n\n @scope.totalClosedMilestones = result.closed\n\n # NOTE: Fix order of USs because the filter orderBy does not work propertly in partials files\n for sprint in sprints\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\")\n @scope.closedSprints = sprints\n @scope.closedSprintsById = groupBy(sprints, (x) -> x.id)\n @rootscope.$broadcast(\"closed-sprints:reloaded\", sprints)\n return sprints\n\n loadSprints: ->\n params = {closed: false}\n return @rs.sprints.list(@scope.projectId, params).then (result) =>\n sprints = result.milestones\n\n @scope.totalMilestones = sprints\n @scope.totalClosedMilestones = result.closed\n @scope.totalOpenMilestones = result.open\n @scope.totalMilestones = @scope.totalOpenMilestones + @scope.totalClosedMilestones\n\n # NOTE: Fix order of USs because the filter orderBy does not work propertly in partials files\n for sprint in sprints\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\")\n\n @scope.sprints = sprints\n @scope.openSprints = _.filter(sprints, (sprint) => not sprint.closed).reverse()\n @scope.closedSprints = [] if !@scope.closedSprints\n\n @scope.sprintsCounter = sprints.length\n @scope.sprintsById = groupBy(sprints, (x) -> x.id)\n @rootscope.$broadcast(\"sprints:loaded\", sprints)\n return sprints\n\n resetFilters: ->\n selectedTags = _.filter(@scope.filters.tags, \"selected\")\n selectedStatuses = _.filter(@scope.filters.status, \"selected\")\n\n @scope.filtersQ = \"\"\n\n _.each [selectedTags, selectedStatuses], (filterGrp) =>\n _.each filterGrp, (item) =>\n filters = @scope.filters[item.type]\n filter = _.find(filters, {id: taiga.toString(item.id)})\n filter.selected = false\n\n @.unselectFilter(item.type, item.id)\n\n @.loadUserstories()\n @rootscope.$broadcast(\"filters:update\")\n\n loadUserstories: ->\n @scope.httpParams = @.getUrlFilters()\n @rs.userstories.storeQueryParams(@scope.projectId, @scope.httpParams)\n\n promise = @rs.userstories.listUnassigned(@scope.projectId, @scope.httpParams)\n\n return promise.then (userstories) =>\n # NOTE: Fix order of USs because the filter orderBy does not work propertly in the partials files\n @scope.userstories = _.sortBy(userstories, \"backlog_order\")\n\n @.setSearchDataFilters()\n\n # The broadcast must be executed when the DOM has been fully reloaded.\n # We can't assure when this exactly happens so we need a defer\n scopeDefer @scope, =>\n @scope.$broadcast(\"userstories:loaded\")\n\n return userstories\n\n loadBacklog: ->\n return @q.all([\n @.loadProjectStats(),\n @.loadSprints(),\n @.loadUserstories()\n ])\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_backlog_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.closedMilestones = !!project.total_closed_milestones\n @scope.$emit('project:loaded', project)\n @scope.points = _.sortBy(project.points, \"order\")\n @scope.pointsById = groupBy(project.points, (x) -> x.id)\n @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id)\n @scope.usStatusList = _.sortBy(project.us_statuses, \"id\")\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.initializeSubscription()\n\n return promise\n .then(=> @.loadBacklog())\n .then(=> @.generateFilters())\n .then(=> @scope.$emit(\"backlog:loaded\"))\n\n prepareBulkUpdateData: (uses, field=\"backlog_order\") ->\n return _.map(uses, (x) -> {\"us_id\": x.id, \"order\": x[field]})\n\n resortUserStories: (uses, field=\"backlog_order\") ->\n items = []\n\n for item, index in uses\n item[field] = index\n if item.isModified()\n items.push(item)\n\n return items\n\n moveUs: (ctx, usList, newUsIndex, newSprintId) ->\n oldSprintId = usList[0].milestone\n project = usList[0].project\n\n movedFromClosedSprint = false\n movedToClosedSprint = false\n\n sprint = @scope.sprintsById[oldSprintId]\n\n # Move from closed sprint\n if !sprint && @scope.closedSprintsById\n sprint = @scope.closedSprintsById[oldSprintId]\n movedFromClosedSprint = true if sprint\n\n newSprint = @scope.sprintsById[newSprintId]\n\n # Move to closed sprint\n if !newSprint && newSprintId\n newSprint = @scope.closedSprintsById[newSprintId]\n movedToClosedSprint = true if newSprint\n\n # In the same sprint or in the backlog\n if newSprintId == oldSprintId\n items = null\n userstories = null\n\n if newSprintId == null\n userstories = @scope.userstories\n else\n userstories = newSprint.user_stories\n\n @scope.$apply ->\n for us, key in usList\n r = userstories.indexOf(us)\n userstories.splice(r, 1)\n\n args = [newUsIndex, 0].concat(usList)\n Array.prototype.splice.apply(userstories, args)\n\n # If in backlog\n if newSprintId == null\n # Rehash userstories order field\n\n items = @.resortUserStories(userstories, \"backlog_order\")\n data = @.prepareBulkUpdateData(items, \"backlog_order\")\n\n # Persist in bulk all affected\n # userstories with order change\n @rs.userstories.bulkUpdateBacklogOrder(project, data).then =>\n for us in usList\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n # For sprint\n else\n # Rehash userstories order field\n items = @.resortUserStories(userstories, \"sprint_order\")\n data = @.prepareBulkUpdateData(items, \"sprint_order\")\n\n # Persist in bulk all affected\n # userstories with order change\n @rs.userstories.bulkUpdateSprintOrder(project, data).then =>\n for us in usList\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n return promise\n\n # From sprint to backlog\n if newSprintId == null\n us.milestone = null for us in usList\n\n @scope.$apply =>\n # Add new us to backlog userstories list\n # @scope.userstories.splice(newUsIndex, 0, us)\n args = [newUsIndex, 0].concat(usList)\n Array.prototype.splice.apply(@scope.userstories, args)\n\n for us, key in usList\n r = sprint.user_stories.indexOf(us)\n sprint.user_stories.splice(r, 1)\n\n # Persist the milestone change of userstory\n promise = @repo.save(us)\n\n # Rehash userstories order field\n # and persist in bulk all changes.\n promise = promise.then =>\n items = @.resortUserStories(@scope.userstories, \"backlog_order\")\n data = @.prepareBulkUpdateData(items, \"backlog_order\")\n return @rs.userstories.bulkUpdateBacklogOrder(us.project, data).then =>\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n if movedFromClosedSprint\n @rootscope.$broadcast(\"backlog:load-closed-sprints\")\n\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n return promise\n\n # From backlog to sprint\n if oldSprintId == null\n us.milestone = newSprintId for us in usList\n\n @scope.$apply =>\n args = [newUsIndex, 0].concat(usList)\n\n # Add moving us to sprint user stories list\n Array.prototype.splice.apply(newSprint.user_stories, args)\n\n # Remove moving us from backlog userstories lists.\n for us, key in usList\n r = @scope.userstories.indexOf(us)\n @scope.userstories.splice(r, 1)\n\n # From sprint to sprint\n else\n us.milestone = newSprintId for us in usList\n\n @scope.$apply =>\n args = [newUsIndex, 0].concat(usList)\n\n # Add new us to backlog userstories list\n Array.prototype.splice.apply(newSprint.user_stories, args)\n\n # Remove the us from the sprint list.\n for us in usList\n r = sprint.user_stories.indexOf(us)\n sprint.user_stories.splice(r, 1)\n\n # Persist the milestone change of userstory\n promises = _.map usList, (us) => @repo.save(us)\n\n # Rehash userstories order field\n # and persist in bulk all changes.\n promise = @q.all(promises).then =>\n items = @.resortUserStories(newSprint.user_stories, \"sprint_order\")\n data = @.prepareBulkUpdateData(items, \"sprint_order\")\n\n @rs.userstories.bulkUpdateSprintOrder(project, data).then (result) =>\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n @rs.userstories.bulkUpdateBacklogOrder(project, data).then =>\n for us in usList\n @rootscope.$broadcast(\"sprint:us:moved\", us, oldSprintId, newSprintId)\n\n if movedToClosedSprint || movedFromClosedSprint\n @scope.$broadcast(\"backlog:load-closed-sprints\")\n\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n return promise\n\n isFilterSelected: (type, id) ->\n if @searchdata[type]? and @searchdata[type][id]\n return true\n return false\n\n setSearchDataFilters: () ->\n urlfilters = @.getUrlFilters()\n\n if urlfilters.q\n @scope.filtersQ = @scope.filtersQ or urlfilters.q\n\n @searchdata = {}\n for name, value of urlfilters\n if not @searchdata[name]?\n @searchdata[name] = {}\n\n for val in taiga.toString(value).split(\",\")\n @searchdata[name][val] = true\n\n getUrlFilters: ->\n return _.pick(@location.search(), \"status\", \"tags\", \"q\")\n\n generateFilters: ->\n urlfilters = @.getUrlFilters()\n @scope.filters = {}\n\n loadFilters = {}\n loadFilters.project = @scope.projectId\n loadFilters.tags = urlfilters.tags\n loadFilters.status = urlfilters.status\n loadFilters.q = urlfilters.q\n loadFilters.milestone = 'null'\n\n return @rs.userstories.filtersData(loadFilters).then (data) =>\n choicesFiltersFormat = (choices, type, byIdObject) =>\n _.map choices, (t) ->\n t.type = type\n return t\n\n tagsFilterFormat = (tags) =>\n return _.map tags, (t) ->\n t.id = t.name\n t.type = 'tags'\n return t\n\n # Build filters data structure\n @scope.filters.status = choicesFiltersFormat(data.statuses, \"status\", @scope.usStatusById)\n @scope.filters.tags = tagsFilterFormat(data.tags)\n\n selectedTags = _.filter(@scope.filters.tags, \"selected\")\n selectedTags = _.map(selectedTags, \"id\")\n\n selectedStatuses = _.filter(@scope.filters.status, \"selected\")\n selectedStatuses = _.map(selectedStatuses, \"id\")\n\n @.markSelectedFilters(@scope.filters, urlfilters)\n\n #store query params\n @rs.userstories.storeQueryParams(@scope.projectId, {\n \"status\": selectedStatuses,\n \"tags\": selectedTags,\n \"project\": @scope.projectId\n \"milestone\": null\n })\n\n markSelectedFilters: (filters, urlfilters) ->\n # Build selected filters (from url) fast lookup data structure\n searchdata = {}\n for name, value of _.omit(urlfilters, \"page\", \"orderBy\")\n if not searchdata[name]?\n searchdata[name] = {}\n\n for val in \"#{value}\".split(\",\")\n searchdata[name][val] = true\n\n isSelected = (type, id) ->\n if searchdata[type]? and searchdata[type][id]\n return true\n return false\n\n for key, value of filters\n for obj in value\n obj.selected = if isSelected(obj.type, obj.id) then true else undefined\n\n ## Template actions\n\n updateUserStoryStatus: () ->\n @.setSearchDataFilters()\n @.generateFilters().then () =>\n @rootscope.$broadcast(\"filters:update\")\n @.loadProjectStats()\n\n editUserStory: (projectId, ref, $event) ->\n target = $($event.target)\n\n currentLoading = @loading()\n .target(target)\n .removeClasses(\"icon-edit\")\n .timeout(200)\n .start()\n\n @rs.userstories.getByRef(projectId, ref).then (us) =>\n @rootscope.$broadcast(\"usform:edit\", us)\n\n currentLoading.finish()\n\n deleteUserStory: (us) ->\n title = @translate.instant(\"US.TITLE_DELETE_ACTION\")\n\n message = us.subject\n\n @confirm.askOnDelete(title, message).then (askResponse) =>\n # We modify the userstories in scope so the user doesn't see the removed US for a while\n @scope.userstories = _.without(@scope.userstories, us)\n promise = @.repo.remove(us)\n promise.then =>\n askResponse.finish()\n @.loadBacklog()\n promise.then null, =>\n askResponse.finish(false)\n @confirm.notify(\"error\")\n\n addNewUs: (type) ->\n switch type\n when \"standard\" then @rootscope.$broadcast(\"usform:new\", @scope.projectId,\n @scope.project.default_us_status, @scope.usStatusList)\n when \"bulk\" then @rootscope.$broadcast(\"usform:bulk\", @scope.projectId,\n @scope.project.default_us_status)\n\n addNewSprint: () ->\n @rootscope.$broadcast(\"sprintform:create\", @scope.projectId)\n\nmodule.controller(\"BacklogController\", BacklogController)\n\n#############################################################################\n## Backlog Directive\n#############################################################################\n\nBacklogDirective = ($repo, $rootscope, $translate) ->\n ## Doom line Link\n doomLineTemplate = _.template(\"\"\"\n
<%- text %>
\n \"\"\")\n\n linkDoomLine = ($scope, $el, $attrs, $ctrl) ->\n reloadDoomLine = ->\n if $scope.stats? and $scope.stats.total_points? and $scope.stats.total_points != 0\n removeDoomlineDom()\n\n stats = $scope.stats\n\n total_points = stats.total_points\n current_sum = stats.assigned_points\n\n return if not $scope.userstories\n\n for us, i in $scope.userstories\n current_sum += us.total_points\n\n if current_sum > total_points\n domElement = $el.find('.backlog-table-body .us-item-row')[i]\n addDoomLineDom(domElement)\n\n break\n\n removeDoomlineDom = ->\n $el.find(\".doom-line\").remove()\n\n addDoomLineDom = (element) ->\n text = $translate.instant(\"BACKLOG.DOOMLINE\")\n $(element).before(doomLineTemplate({\"text\": text}))\n\n getUsItems = ->\n rowElements = $el.find('.backlog-table-body .us-item-row')\n return _.map(rowElements, (x) -> angular.element(x))\n\n $scope.$on(\"userstories:loaded\", reloadDoomLine)\n $scope.$watch \"stats\", reloadDoomLine\n\n ## Move to current sprint link\n\n linkToolbar = ($scope, $el, $attrs, $ctrl) ->\n moveToCurrentSprint = (selectedUss) ->\n ussCurrent = _($scope.userstories)\n\n # Remove them from backlog\n $scope.userstories = ussCurrent.without.apply(ussCurrent, selectedUss).value()\n\n extraPoints = _.map(selectedUss, (v, k) -> v.total_points)\n totalExtraPoints = _.reduce(extraPoints, (acc, num) -> acc + num)\n\n # Add them to current sprint\n $scope.sprints[0].user_stories = _.union($scope.sprints[0].user_stories, selectedUss)\n\n # Update the total of points\n $scope.sprints[0].total_points += totalExtraPoints\n\n $repo.saveAll(selectedUss).then ->\n $ctrl.loadSprints()\n $ctrl.loadProjectStats()\n\n\n shiftPressed = false\n lastChecked = null\n\n checkSelected = (target) ->\n lastChecked = target.closest(\".us-item-row\")\n moveToCurrentSprintDom = $el.find(\"#move-to-current-sprint\")\n selectedUsDom = $el.find(\".backlog-table-body input:checkbox:checked\")\n\n if selectedUsDom.length > 0 and $scope.sprints.length > 0\n moveToCurrentSprintDom.show()\n else\n moveToCurrentSprintDom.hide()\n\n target.closest('.us-item-row').toggleClass('ui-multisortable-multiple')\n\n $(window).on \"keydown.shift-pressed keyup.shift-pressed\", (event) ->\n shiftPressed = !!event.shiftKey\n\n return true\n\n # Enable move to current sprint only when there are selected us's\n $el.on \"change\", \".backlog-table-body input:checkbox\", (event) ->\n # check elements between the last two if shift is pressed\n if lastChecked && shiftPressed\n elements = []\n current = $(event.currentTarget).closest(\".us-item-row\")\n nextAll = lastChecked.nextAll()\n prevAll = lastChecked.prevAll()\n\n if _.some(nextAll, (next) -> next == current[0])\n elements = lastChecked.nextUntil(current)\n else if _.some(prevAll, (prev) -> prev == current[0])\n elements = lastChecked.prevUntil(current)\n\n _.map elements, (elm) ->\n input = $(elm).find(\"input:checkbox\")\n input.prop('checked', true)\n checkSelected(input)\n\n target = angular.element(event.currentTarget)\n target.closest(\".us-item-row\").toggleClass('is-checked')\n checkSelected(target)\n\n $el.on \"click\", \"#move-to-current-sprint\", (event) =>\n # Calculating the us's to be modified\n ussDom = $el.find(\".backlog-table-body input:checkbox:checked\")\n\n ussToMove = _.map ussDom, (item) ->\n item = $(item).closest('.tg-scope')\n itemScope = item.scope()\n itemScope.us.milestone = $scope.sprints[0].id\n return itemScope.us\n\n $scope.$apply(_.partial(moveToCurrentSprint, ussToMove))\n\n $el.on \"click\", \"#show-tags\", (event) ->\n event.preventDefault()\n\n $ctrl.toggleShowTags()\n\n showHideTags($ctrl)\n\n showHideTags = ($ctrl) ->\n elm = angular.element(\"#show-tags\")\n\n if $ctrl.showTags\n elm.addClass(\"active\")\n\n text = $translate.instant(\"BACKLOG.TAGS.HIDE\")\n elm.text(text)\n else\n elm.removeClass(\"active\")\n\n text = $translate.instant(\"BACKLOG.TAGS.SHOW\")\n elm.text(text)\n\n showHideFilter = ($scope, $el, $ctrl) ->\n sidebar = $el.find(\"sidebar.filters-bar\")\n sidebar.one \"transitionend\", () ->\n timeout 150, ->\n $rootscope.$broadcast(\"resize\")\n $('.burndown').css(\"visibility\", \"visible\")\n\n target = angular.element(\"#show-filters-button\")\n $('.burndown').css(\"visibility\", \"hidden\")\n sidebar.toggleClass(\"active\")\n target.toggleClass(\"active\")\n\n hideText = $translate.instant(\"BACKLOG.FILTERS.HIDE\")\n showText = $translate.instant(\"BACKLOG.FILTERS.SHOW\")\n\n toggleText(target.find(\".text\"), [hideText, showText])\n\n if !sidebar.hasClass(\"active\")\n $ctrl.resetFilters()\n\n $ctrl.toggleActiveFilters()\n\n ## Filters Link\n\n linkFilters = ($scope, $el, $attrs, $ctrl) ->\n $scope.filtersSearch = {}\n $el.on \"click\", \"#show-filters-button\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n showHideFilter($scope, $el, $ctrl)\n\n link = ($scope, $el, $attrs, $rootscope) ->\n $ctrl = $el.controller()\n\n linkToolbar($scope, $el, $attrs, $ctrl)\n linkFilters($scope, $el, $attrs, $ctrl)\n linkDoomLine($scope, $el, $attrs, $ctrl)\n\n $el.find(\".backlog-table-body\").disableSelection()\n\n filters = $ctrl.getUrlFilters()\n if filters.status ||\n filters.tags ||\n filters.q\n showHideFilter($scope, $el, $ctrl)\n\n $scope.$on \"showTags\", () ->\n showHideTags($ctrl)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n $(window).off(\".shift-pressed\")\n\n return {link: link}\n\n\nmodule.directive(\"tgBacklog\", [\"$tgRepo\", \"$rootScope\", \"$translate\", BacklogDirective])\n\n#############################################################################\n## User story points directive\n#############################################################################\n\nUsRolePointsSelectorDirective = ($rootscope, $template, $compile, $translate) ->\n selectionTemplate = $template.get(\"backlog/us-role-points-popover.html\", true)\n\n link = ($scope, $el, $attrs) ->\n # Watchers\n bindOnce $scope, \"project\", (project) ->\n roles = _.filter(project.roles, \"computable\")\n numberOfRoles = _.size(roles)\n\n if numberOfRoles > 1\n $el.append($compile(selectionTemplate({\"roles\": roles}))($scope))\n else\n $el.find(\".icon-arrow-bottom\").remove()\n $el.find(\".header-points\").addClass(\"not-clickable\")\n\n $scope.$on \"uspoints:select\", (ctx, roleId, roleName) ->\n $el.find(\".popover\").popover().close()\n $el.find(\".header-points\").html(\"#{roleName}/Total\")\n\n $scope.$on \"uspoints:clear-selection\", (ctx, roleId) ->\n $el.find(\".popover\").popover().close()\n\n text = $translate.instant(\"COMMON.FIELDS.POINTS\")\n $el.find(\".header-points\").text(text)\n\n # Dom Event Handlers\n $el.on \"click\", (event) ->\n target = angular.element(event.target)\n\n if target.is(\"span\") or target.is(\"div\")\n event.stopPropagation()\n\n $el.find(\".popover\").popover().open()\n\n $el.on \"click\", \".clear-selection\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n $rootscope.$broadcast(\"uspoints:clear-selection\")\n\n $el.on \"click\", \".role\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n rolScope = target.scope()\n $rootscope.$broadcast(\"uspoints:select\", target.data(\"role-id\"), target.text())\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgUsRolePointsSelector\", [\"$rootScope\", \"$tgTemplate\", \"$compile\", UsRolePointsSelectorDirective])\n\n\nUsPointsDirective = ($tgEstimationsService, $repo, $tgTemplate) ->\n rolesTemplate = $tgTemplate.get(\"common/estimation/us-points-roles-popover.html\", true)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n updatingSelectedRoleId = null\n selectedRoleId = null\n filteringRoleId = null\n estimationProcess = null\n\n $scope.$on \"uspoints:select\", (ctx, roleId, roleName) ->\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n selectedRoleId = roleId\n estimationProcess.render()\n\n $scope.$on \"uspoints:clear-selection\", (ctx) ->\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n selectedRoleId = null\n estimationProcess.render()\n\n $scope.$watch $attrs.tgBacklogUsPoints, (us) ->\n if us\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project)\n\n # Update roles\n roles = estimationProcess.calculateRoles()\n if roles.length == 0\n $el.find(\".icon-arrow-bottom\").remove()\n $el.find(\"a.us-points\").addClass(\"not-clickable\")\n\n else if roles.length == 1\n # Preselect the role if we have only one\n selectedRoleId = _.keys(us.points)[0]\n\n if estimationProcess.isEditable\n bindClickElements()\n\n estimationProcess.onSelectedPointForRole = (roleId, pointId) ->\n @save(roleId, pointId).then ->\n $ctrl.loadProjectStats()\n\n estimationProcess.render = () ->\n totalPoints = @calculateTotalPoints()\n if not selectedRoleId? or roles.length == 1\n text = totalPoints\n title = totalPoints\n else\n pointId = @us.points[selectedRoleId]\n pointObj = @pointsById[pointId]\n text = \"#{pointObj.name} / #{totalPoints}\"\n title = \"#{pointObj.name} / #{totalPoints}\"\n\n ctx = {\n totalPoints: totalPoints\n roles: @calculateRoles()\n editable: @isEditable\n text: text\n title: title\n }\n mainTemplate = \"common/estimation/us-estimation-total.html\"\n template = $tgTemplate.get(mainTemplate, true)\n html = template(ctx)\n @$el.html(html)\n\n estimationProcess.render()\n\n renderRolesSelector = () ->\n roles = estimationProcess.calculateRoles()\n html = rolesTemplate({\"roles\": roles})\n # Render into DOM and show the new created element\n $el.append(html)\n $el.find(\".pop-role\").popover().open(() -> $(this).remove())\n\n bindClickElements = () ->\n $el.on \"click\", \"a.us-points span\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n updatingSelectedRoleId = selectedRoleId\n if selectedRoleId?\n estimationProcess.renderPointsSelector(selectedRoleId)\n else\n renderRolesSelector()\n\n $el.on \"click\", \".role\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n us = $scope.$eval($attrs.tgBacklogUsPoints)\n updatingSelectedRoleId = target.data(\"role-id\")\n popRolesDom = $el.find(\".pop-role\")\n popRolesDom.find(\"a\").removeClass(\"active\")\n popRolesDom.find(\"a[data-role-id='#{updatingSelectedRoleId}']\").addClass(\"active\")\n estimationProcess.renderPointsSelector(updatingSelectedRoleId)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBacklogUsPoints\", [\"$tgEstimationsService\", \"$tgRepo\", \"$tgTemplate\", UsPointsDirective])\n\n\n#############################################################################\n## Burndown graph directive\n#############################################################################\nToggleBurndownVisibility = ($storage) ->\n hide = () ->\n $(\".js-burndown-graph\").removeClass(\"shown\")\n $(\".js-toggle-burndown-visibility-button\").removeClass(\"active\")\n $(\".js-burndown-graph\").removeClass(\"open\")\n\n show = (firstLoad) ->\n $(\".js-toggle-burndown-visibility-button\").addClass(\"active\")\n\n if firstLoad\n $(\".js-burndown-graph\").addClass(\"shown\")\n else\n $(\".js-burndown-graph\").addClass(\"open\")\n\n link = ($scope, $el, $attrs) ->\n firstLoad = true\n hash = generateHash([\"is-burndown-grpahs-collapsed\"])\n $scope.isBurndownGraphCollapsed = $storage.get(hash) or false\n\n toggleGraph = ->\n if $scope.isBurndownGraphCollapsed\n hide(firstLoad)\n else\n show(firstLoad)\n\n firstLoad = false\n\n $scope.$watch \"showGraphPlaceholder\", () ->\n if $scope.showGraphPlaceholder?\n $scope.isBurndownGraphCollapsed = $scope.isBurndownGraphCollapsed || $scope.showGraphPlaceholder\n toggleGraph()\n\n $el.on \"click\", \".js-toggle-burndown-visibility-button\", ->\n $scope.isBurndownGraphCollapsed = !$scope.isBurndownGraphCollapsed\n $storage.set(hash, $scope.isBurndownGraphCollapsed)\n toggleGraph()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n }\n\nmodule.directive(\"tgToggleBurndownVisibility\", [\"$tgStorage\", ToggleBurndownVisibility])\n\n\n#############################################################################\n## Burndown graph directive\n#############################################################################\n\nBurndownBacklogGraphDirective = ($translate) ->\n redrawChart = (element, dataToDraw) ->\n width = element.width()\n element.height(width/6)\n milestonesRange = [0..(dataToDraw.milestones.length - 1)]\n data = []\n zero_line = _.map(dataToDraw.milestones, (ml) -> 0)\n data.push({\n data: _.zip(milestonesRange, zero_line)\n lines:\n fillColor : \"rgba(0,0,0,0)\"\n points:\n show: false\n })\n optimal_line = _.map(dataToDraw.milestones, (ml) -> ml.optimal)\n data.push({\n data: _.zip(milestonesRange, optimal_line)\n lines:\n fillColor : \"rgba(120,120,120,0.2)\"\n })\n evolution_line = _.filter(_.map(dataToDraw.milestones, (ml) -> ml.evolution), (evolution) -> evolution?)\n data.push({\n data: _.zip(milestonesRange, evolution_line)\n lines:\n fillColor : \"rgba(102,153,51,0.3)\"\n })\n team_increment_line = _.map(dataToDraw.milestones, (ml) -> -ml[\"team-increment\"])\n data.push({\n data: _.zip(milestonesRange, team_increment_line)\n lines:\n fillColor : \"rgba(153,51,51,0.3)\"\n })\n client_increment_line = _.map dataToDraw.milestones, (ml) ->\n -ml[\"team-increment\"] - ml[\"client-increment\"]\n data.push({\n data: _.zip(milestonesRange, client_increment_line)\n lines:\n fillColor : \"rgba(255,51,51,0.3)\"\n })\n\n colors = [\n \"rgba(0,0,0,1)\"\n \"rgba(120,120,120,0.2)\"\n \"rgba(102,153,51,1)\"\n \"rgba(153,51,51,1)\"\n \"rgba(255,51,51,1)\"\n ]\n\n options = {\n grid: {\n borderWidth: { top: 0, right: 1, left:0, bottom: 0 }\n borderColor: \"#ccc\"\n hoverable: true\n }\n xaxis: {\n ticks: dataToDraw.milestones.length\n axisLabel: $translate.instant(\"BACKLOG.CHART.XAXIS_LABEL\"),\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\"\n axisLabelPadding: 5\n tickFormatter: (val, axis) -> \"\"\n }\n yaxis: {\n axisLabel: $translate.instant(\"BACKLOG.CHART.YAXIS_LABEL\"),\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\"\n axisLabelPadding: 5\n }\n series: {\n shadowSize: 0\n lines: {\n show: true\n fill: true\n }\n points: {\n show: true\n fill: true\n radius: 4\n lineWidth: 2\n }\n }\n colors: colors\n tooltip: true\n tooltipOpts: {\n content: (label, xval, yval, flotItem) ->\n if flotItem.seriesIndex == 1\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.OPTIMAL\", ctx)\n else if flotItem.seriesIndex == 2\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.REAL\", ctx)\n else if flotItem.seriesIndex == 3\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_TEAM\", ctx)\n else\n ctx = {sprintName: dataToDraw.milestones[xval].name, value: Math.abs(yval)}\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_CLIENT\", ctx)\n }\n }\n\n element.empty()\n element.plot(data, options).data(\"plot\")\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$watch \"stats\", (value) ->\n if $scope.stats?\n redrawChart(element, $scope.stats)\n\n $scope.$on \"resize\", ->\n redrawChart(element, $scope.stats)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBurndownBacklogGraph\", [\"$translate\", BurndownBacklogGraphDirective])\n\n\n#############################################################################\n## Backlog progress bar directive\n#############################################################################\n\nTgBacklogProgressBarDirective = ($template, $compile) ->\n template = $template.get(\"backlog/progress-bar.html\", true)\n\n render = (scope, el, projectPointsPercentaje, closedPointsPercentaje) ->\n html = template({\n projectPointsPercentaje: projectPointsPercentaje,\n closedPointsPercentaje:closedPointsPercentaje\n })\n html = $compile(html)(scope)\n el.html(html)\n\n adjustPercentaje = (percentage) ->\n adjusted = _.max([0 , percentage])\n adjusted = _.min([100, adjusted])\n return Math.round(adjusted)\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$watch $attrs.tgBacklogProgressBar, (stats) ->\n if stats?\n totalPoints = if stats.total_points then stats.total_points else stats.defined_points\n definedPoints = stats.defined_points\n closedPoints = stats.closed_points\n if definedPoints > totalPoints\n projectPointsPercentaje = totalPoints * 100 / definedPoints\n closedPointsPercentaje = closedPoints * 100 / definedPoints\n else\n projectPointsPercentaje = 100\n closedPointsPercentaje = closedPoints * 100 / totalPoints\n\n projectPointsPercentaje = adjustPercentaje(projectPointsPercentaje - 3)\n closedPointsPercentaje = adjustPercentaje(closedPointsPercentaje - 3)\n render($scope, $el, projectPointsPercentaje, closedPointsPercentaje)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBacklogProgressBar\", [\"$tgTemplate\", \"$compile\", TgBacklogProgressBarDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/sortable.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\n\nmodule = angular.module(\"taigaBacklog\")\n\n\n#############################################################################\n## Sortable Directive\n#############################################################################\n\ndeleteElement = (el) ->\n el.scope().$destroy()\n el.off()\n el.remove()\n\nBacklogSortableDirective = ($repo, $rs, $rootscope, $tgConfirm, $translate) ->\n # Notes about jquery bug:\n # http://stackoverflow.com/questions/5791886/jquery-draggable-shows-\n # helper-in-wrong-place-when-scrolled-down-page\n\n link = ($scope, $el, $attrs) ->\n getUsIndex = (us) =>\n return $(us).index(\".backlog-table-body .row\")\n\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if not (project.my_permissions.indexOf(\"modify_us\") > -1)\n return\n\n filterError = ->\n text = $translate.instant(\"BACKLOG.SORTABLE_FILTER_ERROR\")\n $tgConfirm.notify(\"error\", text)\n\n $el.sortable({\n items: \".us-item-row\",\n cancel: \".popover\"\n connectWith: \".sprint\"\n dropOnEmpty: true\n placeholder: \"row us-item-row us-item-drag sortable-placeholder\"\n scroll: true\n disableHorizontalScroll: true\n # A consequence of length of backlog user story item\n # the default tolerance (\"intersection\") not works properly.\n tolerance: \"pointer\"\n # Revert on backlog is disabled bacause it works bad. Something\n # on the current taiga backlog structure or style makes jquery ui\n # works unexpectly (in some circumstances calculates wrong\n # position for revert).\n revert: false\n start: () ->\n $(document.body).addClass(\"drag-active\")\n stop: () ->\n $(document.body).removeClass(\"drag-active\")\n\n if $el.hasClass(\"active-filters\")\n $el.sortable(\"cancel\")\n filterError()\n })\n\n $el.on \"multiplesortreceive\", (event, ui) ->\n if $el.hasClass(\"active-filters\")\n ui.source.sortable(\"cancel\")\n filterError()\n\n return\n\n itemUs = ui.item.scope().us\n itemIndex = getUsIndex(ui.item)\n\n deleteElement(ui.item)\n\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, null)\n ui.item.find('a').removeClass('noclick')\n\n $el.on \"multiplesortstop\", (event, ui) ->\n # When parent not exists, do nothing\n if $(ui.items[0]).parent().length == 0\n return\n\n if $el.hasClass(\"active-filters\")\n return\n\n items = _.sortBy ui.items, (item) ->\n return $(item).index()\n\n index = _.min _.map items, (item) ->\n return getUsIndex(item)\n\n us = _.map items, (item) ->\n item = $(item)\n itemUs = item.scope().us\n\n # HACK: setTimeout prevents that firefox click\n # event fires just after drag ends\n setTimeout ( =>\n item.find('a').removeClass('noclick')\n ), 300\n\n return itemUs\n\n $scope.$emit(\"sprint:us:move\", us, index, null)\n\n $el.on \"sortstart\", (event, ui) ->\n ui.item.find('a').addClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nBacklogEmptySortableDirective = ($repo, $rs, $rootscope) ->\n # Notes about jquery bug:\n # http://stackoverflow.com/questions/5791886/jquery-draggable-shows-\n # helper-in-wrong-place-when-scrolled-down-page\n\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if project.my_permissions.indexOf(\"modify_us\") > -1\n $el.sortable({\n items: \".us-item-row\",\n dropOnEmpty: true\n })\n\n $el.on \"sortreceive\", (event, ui) ->\n itemUs = ui.item.scope().us\n itemIndex = ui.item.index()\n\n deleteElement(ui.item)\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, null)\n\n ui.item.find('a').removeClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nSprintSortableDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if project.my_permissions.indexOf(\"modify_us\") > -1\n $el.sortable({\n scroll: true\n dropOnEmpty: true\n items: \".sprint-table .milestone-us-item-row\"\n disableHorizontalScroll: true\n connectWith: \".sprint,.backlog-table-body,.empty-backlog\"\n placeholder: \"row us-item-row sortable-placeholder\"\n forcePlaceholderSize:true\n })\n\n $el.on \"multiplesortreceive\", (event, ui) ->\n items = _.sortBy ui.items, (item) ->\n return $(item).index()\n\n index = _.min _.map items, (item) ->\n return $(item).index()\n\n us = _.map items, (item) ->\n item = $(item)\n itemUs = item.scope().us\n\n deleteElement(item)\n\n return itemUs\n\n $scope.$emit(\"sprint:us:move\", us, index, $scope.sprint.id)\n\n $el.on \"multiplesortstop\", (event, ui) ->\n # When parent not exists, do nothing\n if ui.item.parent().length == 0\n return\n\n itemUs = ui.item.scope().us\n itemIndex = ui.item.index()\n\n # HACK: setTimeout prevents that firefox click\n # event fires just after drag ends\n setTimeout ( =>\n ui.item.find('a').removeClass('noclick')\n ), 300\n\n $scope.$emit(\"sprint:us:move\", [itemUs], itemIndex, $scope.sprint.id)\n\n $el.on \"sortstart\", (event, ui) ->\n ui.item.find('a').addClass('noclick')\n\n return {link:link}\n\n\nmodule.directive(\"tgBacklogSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n \"$tgConfirm\",\n \"$translate\",\n BacklogSortableDirective\n])\n\nmodule.directive(\"tgBacklogEmptySortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n BacklogEmptySortableDirective\n])\n\nmodule.directive(\"tgSprintSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n SprintSortableDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog/sprints.coffee\n###\n\ntaiga = @.taiga\n\nmodule = angular.module(\"taigaBacklog\")\n\n\n#############################################################################\n## Sprint Actions Directive\n#############################################################################\n\nBacklogSprintDirective = ($repo, $rootscope) ->\n sprintTableMinHeight = 50\n slideOptions = {\n duration: 500,\n easing: 'linear'\n }\n\n toggleSprint = ($el) =>\n sprintTable = $el.find(\".sprint-table\")\n sprintArrow = $el.find(\".icon-arrow-up\")\n\n sprintArrow.toggleClass('active')\n sprintTable.toggleClass('open')\n\n link = ($scope, $el, $attrs) ->\n $scope.$watch $attrs.tgBacklogSprint, (sprint) ->\n sprint = $scope.$eval($attrs.tgBacklogSprint)\n\n if sprint.closed\n $el.addClass(\"sprint-closed\")\n else\n toggleSprint($el)\n\n # Event Handlers\n $el.on \"click\", \".sprint-name > .icon-arrow-up\", (event) ->\n event.preventDefault()\n\n toggleSprint($el)\n\n $el.find(\".sprint-table\").slideToggle(slideOptions)\n\n $el.on \"click\", \".sprint-name > .icon-edit\", (event) ->\n event.preventDefault()\n\n sprint = $scope.$eval($attrs.tgBacklogSprint)\n $rootscope.$broadcast(\"sprintform:edit\", sprint)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgBacklogSprint\", [\"$tgRepo\", \"$rootScope\", BacklogSprintDirective])\n\n\n#############################################################################\n## Sprint Header Directive\n#############################################################################\n\nBacklogSprintHeaderDirective = ($navUrls, $template, $compile, $translate) ->\n template = $template.get(\"backlog/sprint-header.html\")\n\n link = ($scope, $el, $attrs, $model) ->\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\")\n\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_milestone\") != -1\n\n isVisible = ->\n return $scope.project.my_permissions.indexOf(\"view_milestones\") != -1\n\n render = (sprint) ->\n taskboardUrl = $navUrls.resolve(\"project-taskboard\",\n {project: $scope.project.slug, sprint: sprint.slug})\n\n start = moment(sprint.estimated_start).format(prettyDate)\n finish = moment(sprint.estimated_finish).format(prettyDate)\n estimatedDateRange = \"#{start}-#{finish}\"\n\n ctx = {\n name: sprint.name\n taskboardUrl: taskboardUrl\n estimatedDateRange: estimatedDateRange\n closedPoints: sprint.closed_points or 0\n totalPoints: sprint.total_points or 0\n isVisible: isVisible()\n isEditable: isEditable()\n }\n\n templateScope = $scope.$new()\n\n _.assign(templateScope, ctx)\n\n compiledTemplate = $compile(template)(templateScope)\n $el.html(compiledTemplate)\n\n $scope.$watch $attrs.ngModel, (sprint) ->\n render(sprint)\n\n $scope.$on \"sprintform:edit:success\", ->\n render($model.$modelValue)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgBacklogSprintHeader\", [\"$tgNavUrls\", \"$tgTemplate\", \"$compile\", \"$translate\"\n BacklogSprintHeaderDirective])\n\n\n#############################################################################\n## Toggle Closed Sprints Directive\n#############################################################################\n\nToggleExcludeClosedSprintsVisualization = ($rootscope, $loading, $translate) ->\n excludeClosedSprints = true\n\n link = ($scope, $el, $attrs) ->\n # insert loading wrapper\n loadingElm = $(\"
\")\n $el.after(loadingElm)\n\n currentLoading = null\n\n # Event Handlers\n $el.on \"click\", (event) ->\n event.preventDefault()\n excludeClosedSprints = not excludeClosedSprints\n\n currentLoading = $loading()\n .target(loadingElm)\n .start()\n\n if excludeClosedSprints\n $rootscope.$broadcast(\"backlog:unload-closed-sprints\")\n else\n $rootscope.$broadcast(\"backlog:load-closed-sprints\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $scope.$on \"closed-sprints:reloaded\", (ctx, sprints) =>\n currentLoading.finish()\n\n if sprints.length > 0\n key = \"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS\"\n else\n key = \"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS\"\n\n text = $translate.instant(key)\n\n $el.find(\".text\").text(text)\n\n return {link: link}\n\nmodule.directive(\"tgBacklogToggleClosedSprintsVisualization\", [\"$rootScope\", \"$tgLoading\", \"$translate\",\n ToggleExcludeClosedSprintsVisualization])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard/charts.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaTaskboard\")\n\n#############################################################################\n## Sprint burndown graph directive\n#############################################################################\n\nSprintGraphDirective = ($translate)->\n redrawChart = (element, dataToDraw) ->\n width = element.width()\n element.height(240)\n\n days = _.map(dataToDraw, (x) -> moment(x.day))\n\n data = []\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, (d) -> d.optimal_points))\n lines:\n fillColor : \"rgba(120,120,120,0.2)\"\n })\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, (d) -> d.open_points))\n lines:\n fillColor : \"rgba(102,153,51,0.3)\"\n })\n\n options =\n grid:\n borderWidth: { top: 0, right: 1, left:0, bottom: 0 }\n borderColor: '#ccc'\n hoverable: true\n xaxis:\n tickSize: [1, \"day\"]\n min: days[0]\n max: _.last(days)\n mode: \"time\"\n daysNames: days\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.XAXIS_LABEL\")\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif'\n axisLabelPadding: 5\n yaxis:\n min: 0\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.YAXIS_LABEL\")\n axisLabelUseCanvas: true\n axisLabelFontSizePixels: 12\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif'\n axisLabelPadding: 5\n series:\n shadowSize: 0\n lines:\n show: true\n fill: true\n points:\n show: true\n fill: true\n radius: 4\n lineWidth: 2\n colors: [\"rgba(102,153,51,1)\", \"rgba(120,120,120,0.2)\"]\n tooltip: true\n tooltipOpts:\n content: (label, xval, yval, flotItem) ->\n formattedDate = moment(xval).format($translate.instant(\"TASKBOARD.CHARTS.DATE\"))\n roundedValue = Math.round(yval)\n\n if flotItem.seriesIndex == 1\n return $translate.instant(\"TASKBOARD.CHARTS.OPTIMAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n })\n\n else\n return $translate.instant(\"TASKBOARD.CHARTS.REAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n })\n\n element.empty()\n element.plot(data, options).data(\"plot\")\n\n link = ($scope, $el, $attrs) ->\n element = angular.element($el)\n\n $scope.$on \"resize\", ->\n redrawChart(element, $scope.stats.days) if $scope.stats\n\n $scope.$on \"taskboard:graph:toggle-visibility\", ->\n $el.parent().toggleClass('open')\n\n # fix chart overflow\n timeout(100, ->\n redrawChart(element, $scope.stats.days) if $scope.stats\n )\n\n $scope.$watch 'stats', (value) ->\n if not $scope.stats?\n return\n redrawChart(element, $scope.stats.days)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgSprintGraph\", [\"$translate\", SprintGraphDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nCreateEditTaskDirective = ($repo, $model, $rs, $rootscope, $loading, lightboxService, $translate) ->\n link = ($scope, $el, attrs) ->\n $scope.isNew = true\n\n $scope.$on \"taskform:new\", (ctx, sprintId, usId) ->\n $scope.task = {\n project: $scope.projectId\n milestone: sprintId\n user_story: usId\n is_archived: false\n status: $scope.project.default_task_status\n assigned_to: null\n tags: []\n }\n $scope.isNew = true\n\n # Update texts for creation\n create = $translate.instant(\"COMMON.CREATE\")\n $el.find(\".button-green\").html(create)\n\n newTask = $translate.instant(\"LIGHTBOX.CREATE_EDIT_TASK.TITLE\")\n $el.find(\".title\").html(newTask + \" \")\n\n $el.find(\".tag-input\").val(\"\")\n lightboxService.open($el)\n\n $scope.$on \"taskform:edit\", (ctx, task) ->\n $scope.task = task\n $scope.isNew = false\n\n # Update texts for edition\n save = $translate.instant(\"COMMON.SAVE\")\n edit = $translate.instant(\"LIGHTBOX.CREATE_EDIT_TASK.ACTION_EDIT\")\n\n $el.find(\".button-green\").html(save)\n $el.find(\".title\").html(edit + \" \")\n\n $el.find(\".tag-input\").val(\"\")\n lightboxService.open($el)\n\n\n submitButton = $el.find(\".submit-button\")\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n if $scope.isNew\n promise = $repo.create(\"tasks\", $scope.task)\n broadcastEvent = \"taskform:new:success\"\n else\n promise = $repo.save($scope.task)\n broadcastEvent = \"taskform:edit:success\"\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n # FIXME: error handling?\n promise.then (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $rootscope.$broadcast(broadcastEvent, data)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nCreateBulkTasksDirective = ($repo, $rs, $rootscope, $loading, lightboxService) ->\n link = ($scope, $el, attrs) ->\n $scope.form = {data: \"\", usId: null}\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n data = $scope.form.data\n projectId = $scope.projectId\n sprintId = $scope.form.sprintId\n usId = $scope.form.usId\n\n promise = $rs.tasks.bulkCreate(projectId, sprintId, usId, data)\n promise.then (result) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"taskform:bulk:success\", result)\n lightboxService.close($el)\n\n # TODO: error handling\n promise.then null, ->\n currentLoading.finish()\n console.log \"FAIL\"\n\n $scope.$on \"taskform:bulk\", (ctx, sprintId, usId)->\n lightboxService.open($el)\n $scope.form = {data: \"\", sprintId: sprintId, usId: usId}\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule = angular.module(\"taigaTaskboard\")\n\nmodule.directive(\"tgLbCreateEditTask\", [\n \"$tgRepo\",\n \"$tgModel\",\n \"$tgResources\",\n \"$rootScope\",\n \"$tgLoading\",\n \"lightboxService\",\n \"$translate\"\n CreateEditTaskDirective\n])\n\nmodule.directive(\"tgLbCreateBulkTasks\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n \"$tgLoading\",\n \"lightboxService\",\n CreateBulkTasksDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard.coffee\n###\n\ntaiga = @.taiga\ntoggleText = @.taiga.toggleText\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nscopeDefer = @.taiga.scopeDefer\ntimeout = @.taiga.timeout\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaTaskboard\")\n\n\n#############################################################################\n## Taskboard Controller\n#############################################################################\n\nclass TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"tgAppMetaService\",\n \"$tgLocation\",\n \"$tgNavUrls\"\n \"$tgEvents\"\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @appMetaService, @location, @navUrls,\n @events, @analytics, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"TASKBOARD.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then => @._setMeta()\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n prettyDate = @translate.instant(\"BACKLOG.SPRINTS.DATE\")\n\n title = @translate.instant(\"TASKBOARD.PAGE_TITLE\", {\n projectName: @scope.project.name\n sprintName: @scope.sprint.name\n })\n description = @translate.instant(\"TASKBOARD.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name\n sprintName: @scope.sprint.name\n startDate: moment(@scope.sprint.estimated_start).format(prettyDate)\n endDate: moment(@scope.sprint.estimated_finish).format(prettyDate)\n completedPercentage: @scope.stats.completedPercentage or \"0\"\n completedPoints: @scope.stats.completedPointsSum or \"--\"\n totalPoints: @scope.stats.totalPointsSum or \"--\"\n openTasks: @scope.stats.openTasks or \"--\"\n totalTasks: @scope.stats.total_tasks or \"--\"\n })\n\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n # TODO: Reload entire taskboard after create/edit tasks seems\n # a big overhead. It should be optimized in near future.\n @scope.$on \"taskform:bulk:success\", =>\n @.loadTaskboard()\n @analytics.trackEvent(\"task\", \"create\", \"bulk create task on taskboard\", 1)\n\n @scope.$on \"taskform:new:success\", =>\n @.loadTaskboard()\n @analytics.trackEvent(\"task\", \"create\", \"create task on taskboard\", 1)\n\n @scope.$on(\"taskform:edit:success\", => @.loadTaskboard())\n @scope.$on(\"taskboard:task:move\", @.taskMove)\n\n @scope.$on \"assigned-to:added\", (ctx, userId, task) =>\n task.assigned_to = userId\n promise = @repo.save(task)\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n initializeSubscription: ->\n routingKey = \"changes.project.#{@scope.projectId}.tasks\"\n @events.subscribe @scope, routingKey, (message) =>\n @.loadTaskboard()\n\n routingKey1 = \"changes.project.#{@scope.projectId}.userstories\"\n @events.subscribe @scope, routingKey1, (message) =>\n @.refreshTagsColors()\n @.loadSprintStats()\n @.loadSprint()\n\n loadProject: ->\n return @rs.projects.get(@scope.projectId).then (project) =>\n if not project.is_backlog_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.project = project\n # Not used at this momment\n @scope.pointsList = _.sortBy(project.points, \"order\")\n # @scope.roleList = _.sortBy(project.roles, \"order\")\n @scope.pointsById = groupBy(project.points, (e) -> e.id)\n @scope.roleById = groupBy(project.roles, (e) -> e.id)\n @scope.taskStatusList = _.sortBy(project.task_statuses, \"order\")\n @scope.usStatusList = _.sortBy(project.us_statuses, \"order\")\n @scope.usStatusById = groupBy(project.us_statuses, (e) -> e.id)\n\n @scope.$emit('project:loaded', project)\n\n @.fillUsersAndRoles(project.members, project.roles)\n\n return project\n\n loadSprintStats: ->\n return @rs.sprints.stats(@scope.projectId, @scope.sprintId).then (stats) =>\n totalPointsSum =_.reduce(_.values(stats.total_points), ((res, n) -> res + n), 0)\n completedPointsSum = _.reduce(_.values(stats.completed_points), ((res, n) -> res + n), 0)\n remainingPointsSum = totalPointsSum - completedPointsSum\n remainingTasks = stats.total_tasks - stats.completed_tasks\n @scope.stats = stats\n @scope.stats.totalPointsSum = totalPointsSum\n @scope.stats.completedPointsSum = completedPointsSum\n @scope.stats.remainingPointsSum = remainingPointsSum\n @scope.stats.remainingTasks = remainingTasks\n if stats.totalPointsSum\n @scope.stats.completedPercentage = Math.round(100*stats.completedPointsSum/stats.totalPointsSum)\n else\n @scope.stats.completedPercentage = 0\n\n @scope.stats.openTasks = stats.total_tasks - stats.completed_tasks\n return stats\n\n refreshTagsColors: ->\n return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) =>\n @scope.project.tags_colors = tags_colors\n\n loadSprint: ->\n return @rs.sprints.get(@scope.projectId, @scope.sprintId).then (sprint) =>\n @scope.sprint = sprint\n @scope.userstories = _.sortBy(sprint.user_stories, \"sprint_order\")\n return sprint\n\n loadTasks: ->\n return @rs.tasks.list(@scope.projectId, @scope.sprintId).then (tasks) =>\n @scope.tasks = _.sortBy(tasks, 'taskboard_order')\n @scope.usTasks = {}\n\n # Iterate over all userstories and\n # null userstory for unassigned tasks\n for us in _.union(@scope.userstories, [{id:null}])\n @scope.usTasks[us.id] = {}\n for status in @scope.taskStatusList\n @scope.usTasks[us.id][status.id] = []\n\n for task in @scope.tasks\n if @scope.usTasks[task.user_story]? and @scope.usTasks[task.user_story][task.status]?\n @scope.usTasks[task.user_story][task.status].push(task)\n\n if tasks.length == 0\n \n if @scope.userstories.length > 0\n usId = @scope.userstories[0].id\n else\n usId = null\n\n @scope.usTasks[usId][@scope.taskStatusList[0].id].push({isPlaceholder: true})\n\n return tasks\n\n loadTaskboard: ->\n return @q.all([\n @.refreshTagsColors(),\n @.loadSprintStats(),\n @.loadSprint().then(=> @.loadTasks())\n ])\n\n loadInitialData: ->\n params = {\n pslug: @params.pslug\n sslug: @params.sslug\n }\n\n promise = @repo.resolve(params).then (data) =>\n @scope.projectId = data.project\n @scope.sprintId = data.milestone\n @.initializeSubscription()\n return data\n\n return promise.then(=> @.loadProject())\n .then(=> @.loadTaskboard())\n\n refreshTasksOrder: (tasks) ->\n items = @.resortTasks(tasks)\n data = @.prepareBulkUpdateData(items)\n\n return @rs.tasks.bulkUpdateTaskTaskboardOrder(@scope.project.id, data)\n\n resortTasks: (tasks) ->\n items = []\n\n for item, index in tasks\n item[\"taskboard_order\"] = index\n if item.isModified()\n items.push(item)\n\n return items\n\n prepareBulkUpdateData: (uses) ->\n return _.map(uses, (x) -> {\"task_id\": x.id, \"order\": x[\"taskboard_order\"]})\n\n taskMove: (ctx, task, usId, statusId, order) ->\n # Remove task from old position\n r = @scope.usTasks[task.user_story][task.status].indexOf(task)\n @scope.usTasks[task.user_story][task.status].splice(r, 1)\n\n # Add task to new position\n tasks = @scope.usTasks[usId][statusId]\n tasks.splice(order, 0, task)\n\n task.user_story = usId\n task.status = statusId\n task.taskboard_order = order\n\n promise = @repo.save(task)\n\n @rootscope.$broadcast(\"sprint:task:moved\", task)\n\n promise.then =>\n @.refreshTasksOrder(tasks)\n @.loadSprintStats()\n\n promise.then null, =>\n console.log \"FAIL TASK SAVE\"\n\n ## Template actions\n addNewTask: (type, us) ->\n switch type\n when \"standard\" then @rootscope.$broadcast(\"taskform:new\", @scope.sprintId, us?.id)\n when \"bulk\" then @rootscope.$broadcast(\"taskform:bulk\", @scope.sprintId, us?.id)\n\n editTaskAssignedTo: (task) ->\n @rootscope.$broadcast(\"assigned-to:add\", task)\n\nmodule.controller(\"TaskboardController\", TaskboardController)\n\n\n#############################################################################\n## TaskboardDirective\n#############################################################################\n\nTaskboardDirective = ($rootscope) ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $el.on \"click\", \".toggle-analytics-visibility\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.toggleClass('active')\n $rootscope.$broadcast(\"taskboard:graph:toggle-visibility\")\n\n tableBodyDom = $el.find(\".taskboard-table-body\")\n tableBodyDom.on \"scroll\", (event) ->\n target = angular.element(event.currentTarget)\n tableHeaderDom = $el.find(\".taskboard-table-header .taskboard-table-inner\")\n tableHeaderDom.css(\"left\", -1 * target.scrollLeft())\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgTaskboard\", [\"$rootScope\", TaskboardDirective])\n\n\n#############################################################################\n## Taskboard Task Directive\n#############################################################################\n\nTaskboardTaskDirective = ($rootscope, $loading, $rs) ->\n link = ($scope, $el, $attrs, $model) ->\n $el.disableSelection()\n\n $scope.$watch \"task\", (task) ->\n if task.is_blocked and not $el.hasClass(\"blocked\")\n $el.addClass(\"blocked\")\n else if not task.is_blocked and $el.hasClass(\"blocked\")\n $el.removeClass(\"blocked\")\n\n $el.find(\".icon-edit\").on \"click\", (event) ->\n if $el.find('.icon-edit').hasClass('noclick')\n return\n $scope.$apply ->\n target = $(event.target)\n\n currentLoading = $loading()\n .target(target)\n .timeout(200)\n .removeClasses(\"icon-edit\")\n .start()\n\n task = $scope.task\n $rs.tasks.getByRef(task.project, task.ref).then (editingTask) =>\n $rootscope.$broadcast(\"taskform:edit\", editingTask)\n currentLoading.finish()\n\n return {link:link}\n\n\nmodule.directive(\"tgTaskboardTask\", [\"$rootScope\", \"$tgLoading\", \"$tgResources\", TaskboardTaskDirective])\n\n#############################################################################\n## Taskboard Squish Column Directive\n#############################################################################\n\nTaskboardSquishColumnDirective = (rs) ->\n avatarWidth = 40\n maxColumnWidth = 300\n\n link = ($scope, $el, $attrs) ->\n $scope.$on \"sprint:task:moved\", () =>\n recalculateTaskboardWidth()\n\n bindOnce $scope, \"usTasks\", (project) ->\n $scope.statusesFolded = rs.tasks.getStatusColumnModes($scope.project.id)\n $scope.usFolded = rs.tasks.getUsRowModes($scope.project.id, $scope.sprintId)\n\n recalculateTaskboardWidth()\n\n $scope.foldStatus = (status) ->\n $scope.statusesFolded[status.id] = !!!$scope.statusesFolded[status.id]\n rs.tasks.storeStatusColumnModes($scope.projectId, $scope.statusesFolded)\n\n recalculateTaskboardWidth()\n\n $scope.foldUs = (us) ->\n if !us\n $scope.usFolded[null] = !!!$scope.usFolded[null]\n else\n $scope.usFolded[us.id] = !!!$scope.usFolded[us.id]\n\n rs.tasks.storeUsRowModes($scope.projectId, $scope.sprintId, $scope.usFolded)\n\n recalculateTaskboardWidth()\n\n getCeilWidth = (usId, statusId) =>\n tasks = $scope.usTasks[usId][statusId].length\n\n if $scope.statusesFolded[statusId]\n if tasks and $scope.usFolded[usId]\n tasksMatrixSize = Math.round(Math.sqrt(tasks))\n width = avatarWidth * tasksMatrixSize\n else\n width = avatarWidth\n\n return width\n\n return 0\n\n setStatusColumnWidth = (statusId, width) =>\n column = $el.find(\".squish-status-#{statusId}\")\n\n if width\n column.css('max-width', width)\n else\n column.css(\"max-width\", maxColumnWidth)\n\n refreshTaskboardTableWidth = () =>\n columnWidths = []\n\n columns = $el.find(\".task-colum-name\")\n\n columnWidths = _.map columns, (column) ->\n return $(column).outerWidth(true)\n\n totalWidth = _.reduce columnWidths, (total, width) ->\n return total + width\n\n $el.find('.taskboard-table-inner').css(\"width\", totalWidth)\n\n recalculateStatusColumnWidth = (statusId) =>\n #unassigned ceil\n statusFoldedWidth = getCeilWidth(null, statusId)\n\n _.forEach $scope.userstories, (us) ->\n width = getCeilWidth(us.id, statusId)\n statusFoldedWidth = width if width > statusFoldedWidth\n\n setStatusColumnWidth(statusId, statusFoldedWidth)\n\n recalculateTaskboardWidth = () =>\n _.forEach $scope.taskStatusList, (status) ->\n recalculateStatusColumnWidth(status.id)\n\n refreshTaskboardTableWidth()\n\n return\n\n return {link: link}\n\nmodule.directive(\"tgTaskboardSquishColumn\", [\"$tgResources\", TaskboardSquishColumnDirective])\n\n#############################################################################\n## Taskboard User Directive\n#############################################################################\n\nTaskboardUserDirective = ($log) ->\n clickable = false\n\n link = ($scope, $el, $attrs) ->\n username_label = $el.parent().find(\"a.task-assigned\")\n username_label.addClass(\"not-clickable\")\n\n $scope.$watch 'task.assigned_to', (assigned_to) ->\n user = $scope.usersById[assigned_to]\n\n if user is undefined\n _.assign($scope, {name: \"Unassigned\", imgurl: \"/images/unnamed.png\", clickable: clickable})\n else\n _.assign($scope, {name: user.full_name_display, imgurl: user.photo, clickable: clickable})\n\n username_label.text($scope.name)\n\n\n bindOnce $scope, \"project\", (project) ->\n if project.my_permissions.indexOf(\"modify_task\") > -1\n clickable = true\n $el.find(\".avatar-assigned-to\").on \"click\", (event) =>\n if $el.find('a').hasClass('noclick')\n return\n\n $ctrl = $el.controller()\n $ctrl.editTaskAssignedTo($scope.task)\n\n username_label.removeClass(\"not-clickable\")\n username_label.on \"click\", (event) ->\n if $el.find('a').hasClass('noclick')\n return\n\n $ctrl = $el.controller()\n $ctrl.editTaskAssignedTo($scope.task)\n\n\n return {\n link: link,\n templateUrl: \"taskboard/taskboard-user.html\",\n scope: {\n \"usersById\": \"=users\",\n \"project\": \"=\",\n \"task\": \"=\",\n }\n }\n\n\nmodule.directive(\"tgTaskboardUserAvatar\", [\"$log\", TaskboardUserDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/taskboard/sortable.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\n\nmodule = angular.module(\"taigaBacklog\")\n\n\n#############################################################################\n## Sortable Directive\n#############################################################################\n\nTaskboardSortableDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions we don't enable the sortable\n if not (project.my_permissions.indexOf(\"modify_us\") > -1)\n return\n\n oldParentScope = null\n newParentScope = null\n itemEl = null\n tdom = $el\n\n deleteElement = (itemEl) ->\n # Completelly remove item and its scope from dom\n itemEl.scope().$destroy()\n itemEl.off()\n itemEl.remove()\n\n tdom.sortable({\n handle: \".taskboard-task-inner\",\n dropOnEmpty: true\n connectWith: \".taskboard-tasks-box\"\n revert: 400\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n parentEl = ui.item.parent()\n itemEl = ui.item\n itemTask = itemEl.scope().task\n itemIndex = itemEl.index()\n newParentScope = parentEl.scope()\n\n oldUsId = if oldParentScope.us then oldParentScope.us.id else null\n oldStatusId = oldParentScope.st.id\n newUsId = if newParentScope.us then newParentScope.us.id else null\n newStatusId = newParentScope.st.id\n\n if newStatusId != oldStatusId or newUsId != oldUsId\n deleteElement(itemEl)\n\n $scope.$apply ->\n $rootscope.$broadcast(\"taskboard:task:move\", itemTask, newUsId, newStatusId, itemIndex)\n\n ui.item.find('a').removeClass('noclick')\n\n tdom.on \"sortstart\", (event, ui) ->\n oldParentScope = ui.item.parent().scope()\n ui.item.find('a').addClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgTaskboardSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n TaskboardSortableDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/kanban/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaKanban\")\n\n# Vars\n\ndefaultViewMode = \"maximized\"\nviewModes = [\n \"maximized\",\n \"minimized\"\n]\n\n\n#############################################################################\n## Kanban Controller\n#############################################################################\n\nclass KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @appMetaService, @navUrls, @events, @analytics, @translate) ->\n\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"KANBAN.SECTION_NAME\")\n @scope.statusViewModes = {}\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"KANBAN.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"KANBAN.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n initializeEventHandlers: ->\n @scope.$on \"usform:new:success\", =>\n @.loadUserstories()\n @.refreshTagsColors()\n @analytics.trackEvent(\"userstory\", \"create\", \"create userstory on kanban\", 1)\n\n @scope.$on \"usform:bulk:success\", =>\n @.loadUserstories()\n @analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on kanban\", 1)\n\n @scope.$on \"usform:edit:success\", =>\n @.loadUserstories()\n @.refreshTagsColors()\n\n @scope.$on(\"assigned-to:added\", @.onAssignedToChanged)\n @scope.$on(\"kanban:us:move\", @.moveUs)\n @scope.$on(\"kanban:show-userstories-for-status\", @.loadUserStoriesForStatus)\n @scope.$on(\"kanban:hide-userstories-for-status\", @.hideUserStoriesForStatus)\n\n # Template actions\n\n addNewUs: (type, statusId) ->\n switch type\n when \"standard\" then @rootscope.$broadcast(\"usform:new\", @scope.projectId, statusId, @scope.usStatusList)\n when \"bulk\" then @rootscope.$broadcast(\"usform:bulk\", @scope.projectId, statusId)\n\n changeUsAssignedTo: (us) ->\n @rootscope.$broadcast(\"assigned-to:add\", us)\n\n # Scope Events Handlers\n\n onAssignedToChanged: (ctx, userid, us) ->\n us.assigned_to = userid\n\n promise = @repo.save(us)\n promise.then null, ->\n console.log \"FAIL\" # TODO\n\n # Load data methods\n refreshTagsColors: ->\n return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) =>\n @scope.project.tags_colors = tags_colors\n\n loadUserstories: ->\n params = {\n status__is_archived: false\n }\n\n return @rs.userstories.listAll(@scope.projectId, params).then (userstories) =>\n @scope.userstories = userstories\n\n usByStatus = _.groupBy(userstories, \"status\")\n us_archived = []\n for status in @scope.usStatusList\n if not usByStatus[status.id]?\n usByStatus[status.id] = []\n if @scope.usByStatus?\n for us in @scope.usByStatus[status.id]\n if us.status != status.id\n us_archived.push(us)\n\n # Must preserve the archived columns if loaded\n if status.is_archived and @scope.usByStatus? and @scope.usByStatus[status.id].length != 0\n for us in @scope.usByStatus[status.id].concat(us_archived)\n if us.status == status.id\n usByStatus[status.id].push(us)\n\n usByStatus[status.id] = _.sortBy(usByStatus[status.id], \"kanban_order\")\n\n if userstories.length == 0\n status = @scope.usStatusList[0]\n usByStatus[status.id].push({isPlaceholder: true})\n\n @scope.usByStatus = usByStatus\n\n # The broadcast must be executed when the DOM has been fully reloaded.\n # We can't assure when this exactly happens so we need a defer\n scopeDefer @scope, =>\n @scope.$broadcast(\"userstories:loaded\", userstories)\n\n return userstories\n\n loadUserStoriesForStatus: (ctx, statusId) ->\n params = { status: statusId }\n return @rs.userstories.listAll(@scope.projectId, params).then (userstories) =>\n @scope.usByStatus[statusId] = _.sortBy(userstories, \"kanban_order\")\n @scope.$broadcast(\"kanban:shown-userstories-for-status\", statusId, userstories)\n return userstories\n\n hideUserStoriesForStatus: (ctx, statusId) ->\n @scope.usByStatus[statusId] = []\n @scope.$broadcast(\"kanban:hidden-userstories-for-status\", statusId)\n\n loadKanban: ->\n return @q.all([\n @.refreshTagsColors(),\n @.loadUserstories()\n ])\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_kanban_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.projectId = project.id\n @scope.points = _.sortBy(project.points, \"order\")\n @scope.pointsById = groupBy(project.points, (x) -> x.id)\n @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id)\n @scope.usStatusList = _.sortBy(project.us_statuses, \"order\")\n\n @.generateStatusViewModes()\n\n @scope.$emit(\"project:loaded\", project)\n return project\n\n initializeSubscription: ->\n routingKey1 = \"changes.project.#{@scope.projectId}.userstories\"\n @events.subscribe @scope, routingKey1, (message) =>\n @.loadUserstories()\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.initializeSubscription()\n @.loadKanban().then( => @scope.$broadcast(\"redraw:wip\"))\n\n\n ## View Mode methods\n\n generateStatusViewModes: ->\n storedStatusViewModes = @rs.kanban.getStatusViewModes(@scope.projectId)\n\n @scope.statusViewModes = {}\n for status in @scope.usStatusList\n mode = storedStatusViewModes[status.id] || defaultViewMode\n\n @scope.statusViewModes[status.id] = mode\n\n @.storeStatusViewModes()\n\n storeStatusViewModes: ->\n @rs.kanban.storeStatusViewModes(@scope.projectId, @scope.statusViewModes)\n\n updateStatusViewMode: (statusId, newViewMode) ->\n @scope.statusViewModes[statusId] = newViewMode\n @.storeStatusViewModes()\n\n isMaximized: (statusId) ->\n mode = @scope.statusViewModes[statusId] or defaultViewMode\n return mode == 'maximized'\n\n isMinimized: (statusId) ->\n mode = @scope.statusViewModes[statusId] or defaultViewMode\n return mode == 'minimized'\n\n # Utils methods\n\n prepareBulkUpdateData: (uses, field=\"kanban_order\") ->\n return _.map(uses, (x) -> {\"us_id\": x.id, \"order\": x[field]})\n\n resortUserStories: (uses) ->\n items = []\n for item, index in uses\n item.kanban_order = index\n if item.isModified()\n items.push(item)\n\n return items\n\n moveUs: (ctx, us, oldStatusId, newStatusId, index) ->\n if oldStatusId != newStatusId\n # Remove us from old status column\n r = @scope.usByStatus[oldStatusId].indexOf(us)\n @scope.usByStatus[oldStatusId].splice(r, 1)\n\n # Add us to new status column.\n @scope.usByStatus[newStatusId].splice(index, 0, us)\n us.status = newStatusId\n else\n r = @scope.usByStatus[newStatusId].indexOf(us)\n @scope.usByStatus[newStatusId].splice(r, 1)\n @scope.usByStatus[newStatusId].splice(index, 0, us)\n\n itemsToSave = @.resortUserStories(@scope.usByStatus[newStatusId])\n @scope.usByStatus[newStatusId] = _.sortBy(@scope.usByStatus[newStatusId], \"kanban_order\")\n\n # Persist the userstory\n promise = @repo.save(us)\n\n # Rehash userstories order field\n # and persist in bulk all changes.\n promise = promise.then =>\n itemsToSave = _.reject(itemsToSave, {\"id\": us.id})\n data = @.prepareBulkUpdateData(itemsToSave)\n\n return @rs.userstories.bulkUpdateKanbanOrder(us.project, data).then =>\n return itemsToSave\n\n return promise\n\n\nmodule.controller(\"KanbanController\", KanbanController)\n\n#############################################################################\n## Kanban Directive\n#############################################################################\n\nKanbanDirective = ($repo, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n tableBodyDom = $el.find(\".kanban-table-body\")\n\n tableBodyDom.on \"scroll\", (event) ->\n target = angular.element(event.currentTarget)\n tableHeaderDom = $el.find(\".kanban-table-header .kanban-table-inner\")\n tableHeaderDom.css(\"left\", -1 * target.scrollLeft())\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgKanban\", [\"$tgRepo\", \"$rootScope\", KanbanDirective])\n\n#############################################################################\n## Kanban Archived Status Column Header Control\n#############################################################################\n\nKanbanArchivedStatusHeaderDirective = ($rootscope, $translate) ->\n showArchivedText = $translate.instant(\"KANBAN.ACTION_SHOW_ARCHIVED\")\n hideArchivedText = $translate.instant(\"KANBAN.ACTION_HIDE_ARCHIVED\")\n\n link = ($scope, $el, $attrs) ->\n status = $scope.$eval($attrs.tgKanbanArchivedStatusHeader)\n hidden = true\n\n $scope.class = \"icon-open-eye\"\n $scope.title = showArchivedText\n\n $el.on \"click\", (event) ->\n hidden = not hidden\n\n $scope.$apply ->\n if hidden\n $scope.class = \"icon-open-eye\"\n $scope.title = showArchivedText\n $rootscope.$broadcast(\"kanban:hide-userstories-for-status\", status.id)\n\n else\n $scope.class = \"icon-closed-eye\"\n $scope.title = hideArchivedText\n $rootscope.$broadcast(\"kanban:show-userstories-for-status\", status.id)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgKanbanArchivedStatusHeader\", [ \"$rootScope\", \"$translate\", KanbanArchivedStatusHeaderDirective])\n\n\n#############################################################################\n## Kanban Archived Status Column Intro Directive\n#############################################################################\n\nKanbanArchivedStatusIntroDirective = ($translate) ->\n userStories = []\n\n link = ($scope, $el, $attrs) ->\n hiddenUserStoriexText = $translate.instant(\"KANBAN.HIDDEN_USER_STORIES\")\n status = $scope.$eval($attrs.tgKanbanArchivedStatusIntro)\n $el.text(hiddenUserStoriexText)\n\n updateIntroText = ->\n if userStories.length > 0\n $el.text(\"\")\n else\n $el.text(hiddenUserStoriexText)\n\n $scope.$on \"kanban:us:move\", (ctx, itemUs, oldStatusId, newStatusId, itemIndex) ->\n # The destination columnd is this one\n if status.id == newStatusId\n # Reorder\n if status.id == oldStatusId\n r = userStories.indexOf(itemUs)\n userStories.splice(r, 1)\n userStories.splice(itemIndex, 0, itemUs)\n\n # Archiving user story\n else\n itemUs.isArchived = true\n userStories.splice(itemIndex, 0, itemUs)\n\n # Unarchiving user story\n else if status.id == oldStatusId\n itemUs.isArchived = false\n r = userStories.indexOf(itemUs)\n userStories.splice(r, 1)\n\n updateIntroText()\n\n $scope.$on \"kanban:shown-userstories-for-status\", (ctx, statusId, userStoriesLoaded) ->\n if statusId == status.id\n userStories = _.filter(userStoriesLoaded, (us) -> us.status == status.id)\n updateIntroText()\n\n $scope.$on \"kanban:hidden-userstories-for-status\", (ctx, statusId) ->\n if statusId == status.id\n userStories = []\n updateIntroText()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgKanbanArchivedStatusIntro\", [\"$translate\", KanbanArchivedStatusIntroDirective])\n\n\n#############################################################################\n## Kanban User Story Directive\n#############################################################################\n\nKanbanUserstoryDirective = ($rootscope, $loading, $rs) ->\n link = ($scope, $el, $attrs, $model) ->\n $el.disableSelection()\n\n $scope.$watch \"us\", (us) ->\n if us.is_blocked and not $el.hasClass(\"blocked\")\n $el.addClass(\"blocked\")\n else if not us.is_blocked and $el.hasClass(\"blocked\")\n $el.removeClass(\"blocked\")\n\n $el.on 'click', '.icon-edit', (event) ->\n if $el.find(\".icon-edit\").hasClass(\"noclick\")\n return\n\n target = $(event.target)\n\n currentLoading = $loading()\n .target(target)\n .timeout(200)\n .removeClasses(\"icon-edit\")\n .start()\n\n us = $model.$modelValue\n $rs.userstories.getByRef(us.project, us.ref).then (editingUserStory) =>\n $rootscope.$broadcast(\"usform:edit\", editingUserStory)\n currentLoading.finish()\n\n $scope.getTemplateUrl = () ->\n if $scope.us.isPlaceholder\n return \"common/components/kanban-placeholder.html\"\n else\n return \"kanban/kanban-task.html\"\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n template: '',\n link: link\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgKanbanUserstory\", [\"$rootScope\", \"$tgLoading\", \"$tgResources\", KanbanUserstoryDirective])\n\n#############################################################################\n## Kanban Squish Column Directive\n#############################################################################\n\nKanbanSquishColumnDirective = (rs) ->\n\n link = ($scope, $el, $attrs) ->\n $scope.$on \"project:loaded\", (event, project) ->\n $scope.folds = rs.kanban.getStatusColumnModes(project.id)\n updateTableWidth()\n\n $scope.foldStatus = (status) ->\n $scope.folds[status.id] = !!!$scope.folds[status.id]\n rs.kanban.storeStatusColumnModes($scope.projectId, $scope.folds)\n updateTableWidth()\n return\n\n updateTableWidth = ->\n columnWidths = _.map $scope.usStatusList, (status) ->\n if $scope.folds[status.id]\n return 40\n else\n return 310\n totalWidth = _.reduce columnWidths, (total, width) ->\n return total + width\n $el.find('.kanban-table-inner').css(\"width\", totalWidth)\n\n return {link: link}\n\nmodule.directive(\"tgKanbanSquishColumn\", [\"$tgResources\", KanbanSquishColumnDirective])\n\n#############################################################################\n## Kanban WIP Limit Directive\n#############################################################################\n\nKanbanWipLimitDirective = ->\n link = ($scope, $el, $attrs) ->\n $el.disableSelection()\n\n status = $scope.$eval($attrs.tgKanbanWipLimit)\n\n redrawWipLimit = =>\n $el.find(\".kanban-wip-limit\").remove()\n timeout 200, =>\n element = $el.find(\".kanban-task\")[status.wip_limit]\n if element\n angular.element(element).before(\"
\")\n\n if status and not status.is_archived\n $scope.$on \"redraw:wip\", redrawWipLimit\n $scope.$on \"kanban:us:move\", redrawWipLimit\n $scope.$on \"usform:new:success\", redrawWipLimit\n $scope.$on \"usform:bulk:success\", redrawWipLimit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgKanbanWipLimit\", KanbanWipLimitDirective)\n\n\n#############################################################################\n## Kanban User Directive\n#############################################################################\n\nKanbanUserDirective = ($log, $compile) ->\n template = _.template(\"\"\"\n
\n class=\"not-clickable\"<% } %>>\n \" alt=\"<%- name %>\" class=\"avatar\">\n \n
\n \"\"\")\n\n clickable = false\n\n link = ($scope, $el, $attrs, $model) ->\n username_label = $el.parent().find(\"a.task-assigned\")\n username_label.addClass(\"not-clickable\")\n\n if not $attrs.tgKanbanUserAvatar\n return $log.error \"KanbanUserDirective: no attr is defined\"\n\n wtid = $scope.$watch $attrs.tgKanbanUserAvatar, (v) ->\n if not $scope.usersById?\n $log.error \"KanbanUserDirective requires userById set in scope.\"\n wtid()\n else\n user = $scope.usersById[v]\n render(user)\n\n render = (user) ->\n if user is undefined\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\", clickable: clickable}\n else\n ctx = {name: user.full_name_display, imgurl: user.photo, clickable: clickable}\n\n html = $compile(template(ctx))($scope)\n $el.html(html)\n username_label.text(ctx.name)\n\n bindOnce $scope, \"project\", (project) ->\n if project.my_permissions.indexOf(\"modify_us\") > -1\n clickable = true\n $el.on \"click\", (event) =>\n if $el.find(\"a\").hasClass(\"noclick\")\n return\n\n us = $model.$modelValue\n $ctrl = $el.controller()\n $ctrl.changeUsAssignedTo(us)\n\n username_label.removeClass(\"not-clickable\")\n username_label.on \"click\", (event) ->\n if $el.find(\"a\").hasClass(\"noclick\")\n return\n\n us = $model.$modelValue\n $ctrl = $el.controller()\n $ctrl.changeUsAssignedTo(us)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link, require:\"ngModel\"}\n\nmodule.directive(\"tgKanbanUserAvatar\", [\"$log\", \"$compile\", KanbanUserDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/kanban/sortable.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoggleText = @.taiga.toggleText\nscopeDefer = @.taiga.scopeDefer\nbindOnce = @.taiga.bindOnce\ngroupBy = @.taiga.groupBy\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaKanban\")\n\n\n#############################################################################\n## Sortable Directive\n#############################################################################\n\nKanbanSortableDirective = ($repo, $rs, $rootscope) ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, \"project\", (project) ->\n if not (project.my_permissions.indexOf(\"modify_us\") > -1)\n return\n\n oldParentScope = null\n newParentScope = null\n itemEl = null\n tdom = $el\n\n deleteElement = (itemEl) ->\n # Completelly remove item and its scope from dom\n itemEl.scope().$destroy()\n itemEl.off()\n itemEl.remove()\n\n tdom.sortable({\n handle: \".kanban-task-inner\"\n dropOnEmpty: true\n connectWith: \".kanban-uses-box\"\n revert: 400\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n parentEl = ui.item.parent()\n itemEl = ui.item\n itemUs = itemEl.scope().us\n itemIndex = itemEl.index()\n newParentScope = parentEl.scope()\n\n newStatusId = newParentScope.s.id\n oldStatusId = oldParentScope.s.id\n\n if newStatusId != oldStatusId\n deleteElement(itemEl)\n\n $scope.$apply ->\n $rootscope.$broadcast(\"kanban:us:move\", itemUs, itemUs.status, newStatusId, itemIndex)\n\n ui.item.find('a').removeClass('noclick')\n\n tdom.on \"sortstart\", (event, ui) ->\n oldParentScope = ui.item.parent().scope()\n ui.item.find('a').addClass('noclick')\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgKanbanSortable\", [\n \"$tgRepo\",\n \"$tgResources\",\n \"$rootScope\",\n KanbanSortableDirective\n])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaIssues\")\n\n#############################################################################\n## Issue Detail Controller\n#############################################################################\n\nclass IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgAnalytics\",\n \"$tgNavUrls\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @log, @appMetaService, @analytics, @navUrls, @translate) ->\n bindMethods(@)\n\n @scope.issueRef = @params.issueref\n @scope.sectionName = @translate.instant(\"ISSUES.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n @._setMeta()\n @.initializeOnDeleteGoToUrl()\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n title = @translate.instant(\"ISSUE.PAGE_TITLE\", {\n issueRef: \"##{@scope.issue.ref}\"\n issueSubject: @scope.issue.subject\n projectName: @scope.project.name\n })\n description = @translate.instant(\"ISSUE.PAGE_DESCRIPTION\", {\n issueStatus: @scope.statusById[@scope.issue.status]?.name or \"--\"\n issueType: @scope.typeById[@scope.issue.type]?.name or \"--\"\n issueSeverity: @scope.severityById[@scope.issue.severity]?.name or \"--\"\n issuePriority: @scope.priorityById[@scope.issue.priority]?.name or \"--\"\n issueDescription: angular.element(@scope.issue.description_html or \"\").text()\n })\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n @scope.$on \"attachment:create\", =>\n @analytics.trackEvent(\"attachment\", \"create\", \"create attachment on issue\", 1)\n\n @scope.$on \"promote-issue-to-us:success\", =>\n @analytics.trackEvent(\"issue\", \"promoteToUserstory\", \"promote issue to userstory\", 1)\n @rootscope.$broadcast(\"object:updated\")\n @.loadIssue()\n\n @scope.$on \"comment:new\", =>\n @.loadIssue()\n\n @scope.$on \"custom-attributes-values:edit\", =>\n @rootscope.$broadcast(\"object:updated\")\n\n initializeOnDeleteGoToUrl: ->\n ctx = {project: @scope.project.slug}\n if @scope.project.is_issues_activated\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-issues\", ctx)\n else\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project\", ctx)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.statusList = project.issue_statuses\n @scope.statusById = groupBy(project.issue_statuses, (x) -> x.id)\n @scope.typeById = groupBy(project.issue_types, (x) -> x.id)\n @scope.typeList = _.sortBy(project.issue_types, \"order\")\n @scope.severityList = project.severities\n @scope.severityById = groupBy(project.severities, (x) -> x.id)\n @scope.priorityList = project.priorities\n @scope.priorityById = groupBy(project.priorities, (x) -> x.id)\n return project\n\n loadIssue: ->\n return @rs.issues.getByRef(@scope.projectId, @params.issueref).then (issue) =>\n @scope.issue = issue\n @scope.issueId = issue.id\n @scope.commentModel = issue\n\n if @scope.issue.neighbors.previous.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.issue.neighbors.previous.ref\n }\n @scope.previousUrl = @navUrls.resolve(\"project-issues-detail\", ctx)\n\n if @scope.issue.neighbors.next.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.issue.neighbors.next.ref\n }\n @scope.nextUrl = @navUrls.resolve(\"project-issues-detail\", ctx)\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadIssue()\n\n ###\n # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n # See app/modules/components/vote-button for more info\n ###\n onUpvote: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.upvote(@scope.issueId).then(onSuccess, onError)\n\n onDownvote: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.downvote(@scope.issueId).then(onSuccess, onError)\n\n ###\n # Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n # See app/modules/components/watch-button for more info\n ###\n onWatch: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.watch(@scope.issueId).then(onSuccess, onError)\n\n onUnwatch: ->\n onSuccess = =>\n @.loadIssue()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.issues.unwatch(@scope.issueId).then(onSuccess, onError)\n\nmodule.controller(\"IssueDetailController\", IssueDetailController)\n\n\n#############################################################################\n## Issue status display directive\n#############################################################################\n\nIssueStatusDisplayDirective = ($template, $compile)->\n # Display if a Issue is open or closed and its issueboard status.\n #\n # Example:\n # tg-issue-status-display(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.statusById object\n\n template = $template.get(\"common/components/status-display.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (issue) ->\n status = $scope.statusById[issue.status]\n\n html = template({\n is_closed: status.is_closed\n status: status\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueStatusDisplay\", [\"$tgTemplate\", \"$compile\", IssueStatusDisplayDirective])\n\n\n#############################################################################\n## Issue status button directive\n#############################################################################\n\nIssueStatusButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the status of Issue and you can edit it.\n #\n # Example:\n # tg-issue-status-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.statusById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issues-status-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n status = $scope.statusById[issue.status]\n\n html = template({\n status: status\n statuses: $scope.statusList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (statusId) =>\n $.fn.popover().closeAll()\n\n issue = $model.$modelValue.clone()\n issue.status = statusId\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".status-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n\n save(target.data(\"status-id\"))\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssueStatusButtonDirective])\n\n#############################################################################\n## Issue type button directive\n#############################################################################\n\nIssueTypeButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the type of Issue and you can edit it.\n #\n # Example:\n # tg-issue-type-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.typeById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issue-type-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n type = $scope.typeById[issue.type]\n\n html = template({\n type: type\n typees: $scope.typeList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (type) =>\n $.fn.popover().closeAll()\n issue = $model.$modelValue.clone()\n issue.type = type\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".type-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-type\").popover().open()\n\n $el.on \"click\", \".type\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n type = target.data(\"type-id\")\n save(type)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueTypeButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssueTypeButtonDirective])\n\n\n#############################################################################\n## Issue severity button directive\n#############################################################################\n\nIssueSeverityButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the severity of Issue and you can edit it.\n #\n # Example:\n # tg-issue-severity-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.severityById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issue-severity-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n severity = $scope.severityById[issue.severity]\n\n html = template({\n severity: severity\n severityes: $scope.severityList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (severity) =>\n $.fn.popover().closeAll()\n\n issue = $model.$modelValue.clone()\n issue.severity = severity\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".severity-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-severity\").popover().open()\n\n $el.on \"click\", \".severity\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n severity = target.data(\"severity-id\")\n\n save(severity)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssueSeverityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssueSeverityButtonDirective])\n\n\n#############################################################################\n## Issue priority button directive\n#############################################################################\n\nIssuePriorityButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template, $compile) ->\n # Display the priority of Issue and you can edit it.\n #\n # Example:\n # tg-issue-priority-button(ng-model=\"issue\")\n #\n # Requirements:\n # - Issue object (ng-model)\n # - scope.priorityById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"issue/issue-priority-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_issue\") != -1\n\n render = (issue) =>\n priority = $scope.priorityById[issue.priority]\n\n html = template({\n priority: priority\n priorityes: $scope.priorityList\n editable: isEditable()\n })\n\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (priority) =>\n $.fn.popover().closeAll()\n\n issue = $model.$modelValue.clone()\n issue.priority = priority\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(issue)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n onError = ->\n $confirm.notify(\"error\")\n issue.revert()\n $model.$setViewValue(issue)\n currentLoading.finish()\n\n $repo.save(issue).then(onSuccess, onError)\n\n $el.on \"click\", \".priority-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-priority\").popover().open()\n\n $el.on \"click\", \".priority\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n priority = target.data(\"priority-id\")\n\n save(priority)\n\n $scope.$watch $attrs.ngModel, (issue) ->\n render(issue) if issue\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgIssuePriorityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", IssuePriorityButtonDirective])\n\n\n#############################################################################\n## Promote Issue to US button directive\n#############################################################################\n\nPromoteIssueToUsButtonDirective = ($rootScope, $repo, $confirm, $qqueue, $translate) ->\n link = ($scope, $el, $attrs, $model) ->\n\n save = $qqueue.bindAdd (issue, askResponse) =>\n data = {\n generated_from_issue: issue.id\n project: issue.project,\n subject: issue.subject\n description: issue.description\n tags: issue.tags\n is_blocked: issue.is_blocked\n blocked_note: issue.blocked_note\n }\n\n onSuccess = ->\n askResponse.finish()\n $confirm.notify(\"success\")\n $rootScope.$broadcast(\"promote-issue-to-us:success\")\n\n onError = ->\n askResponse.finish()\n $confirm.notify(\"error\")\n\n $repo.create(\"userstories\", data).then(onSuccess, onError)\n\n\n $el.on \"click\", \"a\", (event) ->\n event.preventDefault()\n issue = $model.$modelValue\n\n title = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.TITLE\")\n message = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.MESSAGE\")\n subtitle = issue.subject\n\n $confirm.ask(title, subtitle, message).then (response) =>\n save(issue, response)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n restrict: \"AE\"\n require: \"ngModel\"\n templateUrl: \"issue/promote-issue-to-us-button.html\"\n link: link\n }\n\nmodule.directive(\"tgPromoteIssueToUsButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgQqueue\", \"$translate\"\n PromoteIssueToUsButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaIssues\")\n\n#############################################################################\n## Issue Create Lightbox Directive\n#############################################################################\n\nCreateIssueDirective = ($repo, $confirm, $rootscope, lightboxService, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley()\n $scope.issue = {}\n\n $scope.$on \"issueform:new\", (ctx, project)->\n $el.find(\".tag-input\").val(\"\")\n\n lightboxService.open($el)\n\n $scope.issue = {\n project: project.id\n subject: \"\"\n status: project.default_issue_status\n type: project.default_issue_type\n priority: project.default_priority\n severity: project.default_severity\n tags: []\n }\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.create(\"issues\", $scope.issue)\n\n promise.then (data) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"issueform:new:success\", data)\n lightboxService.close($el)\n $confirm.notify(\"success\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n\n return {link:link}\n\nmodule.directive(\"tgLbCreateIssue\", [\"$tgRepo\", \"$tgConfirm\", \"$rootScope\", \"lightboxService\", \"$tgLoading\",\n CreateIssueDirective])\n\n\n#############################################################################\n## Issue Bulk Create Lightbox Directive\n#############################################################################\n\nCreateBulkIssuesDirective = ($repo, $rs, $confirm, $rootscope, $loading, lightboxService) ->\n link = ($scope, $el, attrs) ->\n $scope.$on \"issueform:bulk\", (ctx, projectId, status)->\n lightboxService.open($el)\n $scope.new = {\n projectId: projectId\n bulk: \"\"\n }\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n data = $scope.new.bulk\n projectId = $scope.new.projectId\n\n promise = $rs.issues.bulkCreate(projectId, data)\n promise.then (result) ->\n currentLoading.finish()\n $rootscope.$broadcast(\"issueform:new:success\", result)\n lightboxService.close($el)\n $confirm.notify(\"success\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateBulkIssues\", [\"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\",\n \"lightboxService\", CreateBulkIssuesDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/list.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntrim = @.taiga.trim\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounceLeading = @.taiga.debounceLeading\nstartswith = @.taiga.startswith\n\nmodule = angular.module(\"taigaIssues\")\n\n#############################################################################\n## Issues Controller\n#############################################################################\n\nclass IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$tgUrls\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgEvents\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @urls, @params, @q, @location, @appMetaService,\n @navUrls, @events, @analytics, @translate) ->\n @scope.sectionName = \"Issues\"\n @scope.filters = {}\n\n if _.isEmpty(@location.search())\n filters = @rs.issues.getFilters(@params.pslug)\n filters.page = 1\n @location.search(filters)\n @location.replace()\n return\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"ISSUES.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"ISSUES.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"issueform:new:success\", =>\n @analytics.trackEvent(\"issue\", \"create\", \"create issue on issues list\", 1)\n @.loadIssues()\n\n initializeSubscription: ->\n routingKey = \"changes.project.#{@scope.projectId}.issues\"\n @events.subscribe @scope, routingKey, (message) =>\n @.loadIssues()\n\n storeFilters: ->\n @rs.issues.storeFilters(@params.pslug, @location.search())\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_issues_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n\n @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id)\n @scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\")\n @scope.severityById = groupBy(project.severities, (x) -> x.id)\n @scope.severityList = _.sortBy(project.severities, \"order\")\n @scope.priorityById = groupBy(project.priorities, (x) -> x.id)\n @scope.priorityList = _.sortBy(project.priorities, \"order\")\n @scope.issueTypes = _.sortBy(project.issue_types, \"order\")\n @scope.issueTypeById = groupBy(project.issue_types, (x) -> x.id)\n\n return project\n\n getUrlFilters: ->\n filters = _.pick(@location.search(), \"page\", \"tags\", \"status\", \"types\",\n \"q\", \"severities\", \"priorities\",\n \"assignedTo\", \"createdBy\", \"orderBy\")\n\n filters.page = 1 if not filters.page\n return filters\n\n getUrlFilter: (name) ->\n filters = _.pick(@location.search(), name)\n return filters[name]\n\n loadMyFilters: ->\n return @rs.issues.getMyFilters(@scope.projectId).then (filters) =>\n return _.map filters, (value, key) =>\n return {id: key, name: key, type: \"myFilters\", selected: false}\n\n removeNotExistingFiltersFromUrl: ->\n currentSearch = @location.search()\n urlfilters = @.getUrlFilters()\n\n for filterName, filterValue of urlfilters\n if filterName == \"page\" or filterName == \"orderBy\" or filterName == \"q\"\n continue\n\n if filterName == \"tags\"\n splittedValues = _.map(\"#{filterValue}\".split(\",\"))\n else\n splittedValues = _.map(\"#{filterValue}\".split(\",\"), (x) -> if x == \"null\" then null else parseInt(x))\n\n existingValues = _.intersection(splittedValues, _.map(@scope.filters[filterName], \"id\"))\n if splittedValues.length != existingValues.length\n @location.search(filterName, existingValues.join())\n\n if currentSearch != @location.search()\n @location.replace()\n\n markSelectedFilters: (filters, urlfilters) ->\n # Build selected filters (from url) fast lookup data structure\n searchdata = {}\n for name, value of _.omit(urlfilters, \"page\", \"orderBy\")\n if not searchdata[name]?\n searchdata[name] = {}\n\n for val in \"#{value}\".split(\",\")\n searchdata[name][val] = true\n\n isSelected = (type, id) ->\n if searchdata[type]? and searchdata[type][id]\n return true\n return false\n\n for key, value of filters\n for obj in value\n obj.selected = if isSelected(obj.type, obj.id) then true else undefined\n\n loadFilters: ->\n urlfilters = @.getUrlFilters()\n\n if urlfilters.q\n @scope.filtersQ = urlfilters.q\n\n # Load My Filters\n promise = @.loadMyFilters().then (myFilters) =>\n @scope.filters.myFilters = myFilters\n return myFilters\n\n loadFilters = {}\n loadFilters.project = @scope.projectId\n loadFilters.tags = urlfilters.tags\n loadFilters.status = urlfilters.status\n loadFilters.q = urlfilters.q\n loadFilters.types = urlfilters.types\n loadFilters.severities = urlfilters.severities\n loadFilters.priorities = urlfilters.priorities\n loadFilters.assigned_to = urlfilters.assignedTo\n loadFilters.owner = urlfilters.createdBy\n\n # Load default filters data\n promise = promise.then =>\n return @rs.issues.filtersData(loadFilters)\n\n # Format filters and set them on scope\n return promise.then (data) =>\n usersFiltersFormat = (users, type, unknownOption) =>\n reformatedUsers = _.map users, (t) =>\n t.type = type\n t.name = if t.full_name then t.full_name else unknownOption\n\n return t\n\n unknownItem = _.remove(reformatedUsers, (u) -> not u.id)\n reformatedUsers = _.sortBy(reformatedUsers, (u) -> u.name.toUpperCase())\n if unknownItem.length > 0\n reformatedUsers.unshift(unknownItem[0])\n return reformatedUsers\n\n choicesFiltersFormat = (choices, type, byIdObject) =>\n _.map choices, (t) ->\n t.type = type\n return t\n\n tagsFilterFormat = (tags) =>\n return _.map tags, (t) ->\n t.id = t.name\n t.type = 'tags'\n return t\n\n # Build filters data structure\n @scope.filters.status = choicesFiltersFormat(data.statuses, \"status\", @scope.issueStatusById)\n @scope.filters.severities = choicesFiltersFormat(data.severities, \"severities\", @scope.severityById)\n @scope.filters.priorities = choicesFiltersFormat(data.priorities, \"priorities\", @scope.priorityById)\n @scope.filters.assignedTo = usersFiltersFormat(data.assigned_to, \"assignedTo\", \"Unassigned\")\n @scope.filters.createdBy = usersFiltersFormat(data.owners, \"createdBy\", \"Unknown\")\n @scope.filters.types = choicesFiltersFormat(data.types, \"types\", @scope.issueTypeById)\n @scope.filters.tags = tagsFilterFormat(data.tags)\n\n @.removeNotExistingFiltersFromUrl()\n @.markSelectedFilters(@scope.filters, urlfilters)\n\n @rootscope.$broadcast(\"filters:loaded\", @scope.filters)\n\n # We need to guarantee that the last petition done here is the finally used\n # When searching by text loadIssues can be called fastly with different parameters and\n # can be resolved in a different order than generated\n # We count the requests made and only if the callback is for the last one data is updated\n loadIssuesRequests: 0\n loadIssues: =>\n @scope.urlFilters = @.getUrlFilters()\n\n # Convert stored filters to http parameters\n # ready filters (the name difference exists\n # because of some automatic lookups and is\n # the simplest way todo it without adding\n # additional complexity to code.\n @scope.httpParams = {}\n for name, values of @scope.urlFilters\n if name == \"severities\"\n name = \"severity\"\n else if name == \"orderBy\"\n name = \"order_by\"\n else if name == \"priorities\"\n name = \"priority\"\n else if name == \"assignedTo\"\n name = \"assigned_to\"\n else if name == \"createdBy\"\n name = \"owner\"\n else if name == \"status\"\n name = \"status\"\n else if name == \"types\"\n name = \"type\"\n @scope.httpParams[name] = values\n\n promise = @rs.issues.list(@scope.projectId, @scope.httpParams)\n @.loadIssuesRequests += 1\n promise.index = @.loadIssuesRequests\n promise.then (data) =>\n if promise.index == @.loadIssuesRequests\n @scope.issues = data.models\n @scope.page = data.current\n @scope.count = data.count\n @scope.paginatedBy = data.paginatedBy\n\n return data\n\n return promise\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.initializeSubscription()\n @.loadFilters()\n\n return @.loadIssues()\n\n saveCurrentFiltersTo: (newFilter) ->\n deferred = @q.defer()\n @rs.issues.getMyFilters(@scope.projectId).then (filters) =>\n filters[newFilter] = @location.search()\n @rs.issues.storeMyFilters(@scope.projectId, filters).then =>\n deferred.resolve()\n return deferred.promise\n\n deleteMyFilter: (filter) ->\n deferred = @q.defer()\n @rs.issues.getMyFilters(@scope.projectId).then (filters) =>\n delete filters[filter]\n @rs.issues.storeMyFilters(@scope.projectId, filters).then =>\n deferred.resolve()\n return deferred.promise\n\n # Functions used from templates\n addNewIssue: ->\n @rootscope.$broadcast(\"issueform:new\", @scope.project)\n\n addIssuesInBulk: ->\n @rootscope.$broadcast(\"issueform:bulk\", @scope.projectId)\n\n\nmodule.controller(\"IssuesController\", IssuesController)\n\n#############################################################################\n## Issues Directive\n#############################################################################\n\nIssuesDirective = ($log, $location, $template, $compile) ->\n ## Issues Pagination\n template = $template.get(\"issue/issue-paginator.html\", true)\n\n linkPagination = ($scope, $el, $attrs, $ctrl) ->\n # Constants\n afterCurrent = 2\n beforeCurrent = 4\n atBegin = 2\n atEnd = 2\n\n $pagEl = $el.find(\".issues-paginator\")\n\n getNumPages = ->\n numPages = $scope.count / $scope.paginatedBy\n if parseInt(numPages, 10) < numPages\n numPages = parseInt(numPages, 10) + 1\n else\n numPages = parseInt(numPages, 10)\n\n return numPages\n\n renderPagination = ->\n numPages = getNumPages()\n\n if numPages <= 1\n $pagEl.hide()\n return\n $pagEl.show()\n\n pages = []\n options = {}\n options.pages = pages\n options.showPrevious = ($scope.page > 1)\n options.showNext = not ($scope.page == numPages)\n\n cpage = $scope.page\n\n for i in [1..numPages]\n if i == (cpage + afterCurrent) and numPages > (cpage + afterCurrent + atEnd)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i == (cpage - beforeCurrent) and cpage > (atBegin + beforeCurrent)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i > (cpage + afterCurrent) and i <= (numPages - atEnd)\n else if i < (cpage - beforeCurrent) and i > atBegin\n else if i == cpage\n pages.push({classes: \"active\", num: i, type: \"page-active\"})\n else\n pages.push({classes: \"page\", num: i, type: \"page\"})\n\n\n html = template(options)\n html = $compile(html)($scope)\n\n $pagEl.html(html)\n\n $scope.$watch \"issues\", (value) ->\n # Do nothing if value is not logical true\n return if not value\n\n renderPagination()\n\n $el.on \"click\", \".issues-paginator a.next\", (event) ->\n event.preventDefault()\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page + 1)\n $ctrl.loadIssues()\n\n $el.on \"click\", \".issues-paginator a.previous\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page - 1)\n $ctrl.loadIssues()\n\n $el.on \"click\", \".issues-paginator li.page > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n pagenum = target.data(\"pagenum\")\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", pagenum)\n $ctrl.loadIssues()\n\n ## Issues Filters\n linkOrdering = ($scope, $el, $attrs, $ctrl) ->\n # Draw the arrow the first time\n currentOrder = $ctrl.getUrlFilter(\"orderBy\") or \"created_date\"\n if currentOrder\n icon = if startswith(currentOrder, \"-\") then \"icon-arrow-up\" else \"icon-arrow-bottom\"\n colHeadElement = $el.find(\".row.title > div[data-fieldname='#{trim(currentOrder, \"-\")}']\")\n colHeadElement.html(\"#{colHeadElement.html()}\")\n\n $el.on \"click\", \".row.title > div\", (event) ->\n target = angular.element(event.currentTarget)\n\n currentOrder = $ctrl.getUrlFilter(\"orderBy\")\n newOrder = target.data(\"fieldname\")\n\n finalOrder = if currentOrder == newOrder then \"-#{newOrder}\" else newOrder\n\n $scope.$apply ->\n $ctrl.replaceFilter(\"orderBy\", finalOrder)\n $ctrl.storeFilters()\n $ctrl.loadIssues().then ->\n # Update the arrow\n $el.find(\".row.title > div > span.icon\").remove()\n icon = if startswith(finalOrder, \"-\") then \"icon-arrow-up\" else \"icon-arrow-bottom\"\n target.html(\"#{target.html()}\")\n\n ## Issues Link\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n linkOrdering($scope, $el, $attrs, $ctrl)\n linkPagination($scope, $el, $attrs, $ctrl)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgIssues\", [\"$log\", \"$tgLocation\", \"$tgTemplate\", \"$compile\", IssuesDirective])\n\n\n#############################################################################\n## Issues Filters Directive\n#############################################################################\n\nIssuesFiltersDirective = ($q, $log, $location, $rs, $confirm, $loading, $template, $translate, $compile, $auth) ->\n template = $template.get(\"issue/issues-filters.html\", true)\n templateSelected = $template.get(\"issue/issues-filters-selected.html\", true)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.closest(\".wrapper\").controller()\n\n selectedFilters = []\n\n showFilters = (title, type) ->\n $el.find(\".filters-cats\").hide()\n $el.find(\".filter-list\").removeClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").removeClass(\"hidden\")\n $el.find(\"h2 a.subfilter span.title\").html(title)\n $el.find(\"h2 a.subfilter span.title\").prop(\"data-type\", type)\n\n showCategories = ->\n $el.find(\".filters-cats\").show()\n $el.find(\".filter-list\").addClass(\"hidden\")\n $el.find(\"h2.breadcrumb\").addClass(\"hidden\")\n\n initializeSelectedFilters = (filters) ->\n selectedFilters = []\n for name, values of filters\n for val in values\n selectedFilters.push(val) if val.selected\n\n renderSelectedFilters(selectedFilters)\n\n renderSelectedFilters = (selectedFilters) ->\n _.filter selectedFilters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = templateSelected({filters:selectedFilters})\n html = $compile(html)($scope)\n $el.find(\".filters-applied\").html(html)\n\n if $auth.isAuthenticated() && selectedFilters.length > 0\n $el.find(\".save-filters\").show()\n else\n $el.find(\".save-filters\").hide()\n\n renderFilters = (filters) ->\n _.filter filters, (f) =>\n if f.color\n f.style = \"border-left: 3px solid #{f.color}\"\n\n html = template({filters:filters})\n html = $compile(html)($scope)\n $el.find(\".filter-list\").html(html)\n\n getFiltersType = () ->\n return $el.find(\"h2 a.subfilter span.title\").prop('data-type')\n\n reloadIssues = () ->\n currentFiltersType = getFiltersType()\n\n $q.all([$ctrl.loadIssues(), $ctrl.loadFilters()]).then () ->\n filters = $scope.filters[currentFiltersType]\n renderFilters(_.reject(filters, \"selected\"))\n\n toggleFilterSelection = (type, id) ->\n if type == \"myFilters\"\n $rs.issues.getMyFilters($scope.projectId).then (data) ->\n myFilters = data\n filters = myFilters[id]\n filters.page = 1\n $ctrl.replaceAllFilters(filters)\n $ctrl.storeFilters()\n $ctrl.loadIssues()\n $ctrl.markSelectedFilters($scope.filters, filters)\n initializeSelectedFilters($scope.filters)\n return null\n\n filters = $scope.filters[type]\n filterId = if type == 'tags' then taiga.toString(id) else id\n filter = _.find(filters, {id: filterId})\n filter.selected = (not filter.selected)\n\n # Convert id to null as string for properly\n # put null value on url parameters\n id = \"null\" if id is null\n\n if filter.selected\n selectedFilters.push(filter)\n $ctrl.selectFilter(type, id)\n $ctrl.selectFilter(\"page\", 1)\n $ctrl.storeFilters()\n else\n selectedFilters = _.reject selectedFilters, (f) ->\n return f.id == filter.id && f.type == filter.type\n\n $ctrl.unselectFilter(type, id)\n $ctrl.selectFilter(\"page\", 1)\n $ctrl.storeFilters()\n\n reloadIssues()\n\n renderSelectedFilters(selectedFilters)\n\n currentFiltersType = getFiltersType()\n\n if type == currentFiltersType\n renderFilters(_.reject(filters, \"selected\"))\n\n # Angular Watchers\n $scope.$on \"filters:loaded\", (ctx, filters) ->\n initializeSelectedFilters(filters)\n\n $scope.$on \"filters:issueupdate\", (ctx, filters) ->\n html = template({filters:filters.status})\n html = $compile(html)($scope)\n $el.find(\".filter-list\").html(html)\n\n selectQFilter = debounceLeading 100, (value) ->\n return if value is undefined\n\n $ctrl.replaceFilter(\"page\", null, true)\n\n if value.length == 0\n $ctrl.replaceFilter(\"q\", null)\n $ctrl.storeFilters()\n else\n $ctrl.replaceFilter(\"q\", value)\n $ctrl.storeFilters()\n\n reloadIssues()\n\n $scope.$watch(\"filtersQ\", selectQFilter)\n\n # Dom Event Handlers\n $el.on \"click\", \".filters-cats > ul > li > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n tags = $scope.filters[target.data(\"type\")]\n renderFilters(_.reject(tags, \"selected\"))\n showFilters(target.attr(\"title\"), target.data(\"type\"))\n\n $el.on \"click\", \".filters-inner > .filters-step-cat > .breadcrumb > .back\", (event) ->\n event.preventDefault()\n showCategories($el)\n\n $el.on \"click\", \".filters-applied a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n id = target.data(\"id\") or null\n type = target.data(\"type\")\n toggleFilterSelection(type, id)\n\n $el.on \"click\", \".filter-list .single-filter\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.toggleClass(\"active\")\n\n id = target.data(\"id\") or null\n type = target.data(\"type\")\n\n # A saved filter can't be active\n if type == \"myFilters\"\n target.removeClass(\"active\")\n\n toggleFilterSelection(type, id)\n\n $el.on \"click\", \".filter-list .single-filter .icon-delete\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n\n target = angular.element(event.currentTarget)\n customFilterName = target.parent().data('id')\n title = $translate.instant(\"ISSUES.FILTERS.CONFIRM_DELETE.TITLE\")\n message = $translate.instant(\"ISSUES.FILTERS.CONFIRM_DELETE.MESSAGE\", {customFilterName: customFilterName})\n\n $confirm.askOnDelete(title, message).then (askResponse) ->\n promise = $ctrl.deleteMyFilter(customFilterName)\n promise.then ->\n promise = $ctrl.loadMyFilters()\n promise.then (filters) ->\n askResponse.finish()\n $scope.filters.myFilters = filters\n renderFilters($scope.filters.myFilters)\n promise.then null, ->\n askResponse.finish()\n promise.then null, ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n\n $el.on \"click\", \".save-filters\", (event) ->\n event.preventDefault()\n renderFilters($scope.filters[\"myFilters\"])\n showFilters(\"My filters\", \"myFilters\")\n $el.find('.save-filters').hide()\n $el.find('.my-filter-name').removeClass(\"hidden\")\n $el.find('.my-filter-name').focus()\n $scope.$apply()\n\n $el.on \"keyup\", \".my-filter-name\", (event) ->\n event.preventDefault()\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n newFilter = target.val()\n currentLoading = $loading()\n .target($el.find(\".new\"))\n .start()\n promise = $ctrl.saveCurrentFiltersTo(newFilter)\n promise.then ->\n loadPromise = $ctrl.loadMyFilters()\n loadPromise.then (filters) ->\n currentLoading.finish()\n $scope.filters.myFilters = filters\n\n currentfilterstype = $el.find(\"h2 a.subfilter span.title\").prop('data-type')\n if currentfilterstype == \"myFilters\"\n renderFilters($scope.filters.myFilters)\n\n $el.find('.my-filter-name').addClass(\"hidden\")\n $el.find('.save-filters').show()\n\n loadPromise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\", \"Error loading custom filters\")\n\n promise.then null, ->\n currentLoading.finish()\n $el.find(\".my-filter-name\").val(newFilter).focus().select()\n $confirm.notify(\"error\", \"Filter not saved\")\n\n else if event.keyCode == 27\n $el.find('.my-filter-name').val('')\n $el.find('.my-filter-name').addClass(\"hidden\")\n $el.find('.save-filters').show()\n\n return {link:link}\n\nmodule.directive(\"tgIssuesFilters\", [\"$q\", \"$log\", \"$tgLocation\", \"$tgResources\", \"$tgConfirm\", \"$tgLoading\",\n \"$tgTemplate\", \"$translate\", \"$compile\", \"$tgAuth\", IssuesFiltersDirective])\n\n\n#############################################################################\n## Issue status Directive (popover for change status)\n#############################################################################\n\nIssueStatusInlineEditionDirective = ($repo, $template, $rootscope) ->\n ###\n Print the status of an Issue and a popover to change it.\n - tg-issue-status-inline-edition: The issue\n\n Example:\n\n div.status(tg-issue-status-inline-edition=\"issue\")\n a.issue-status(href=\"\")\n\n NOTE: This directive need 'issueStatusById' and 'project'.\n ###\n selectionTemplate = $template.get(\"issue/issue-status-inline-edition-selection.html\", true)\n\n updateIssueStatus = ($el, issue, issueStatusById) ->\n issueStatusDomParent = $el.find(\".issue-status\")\n issueStatusDom = $el.find(\".issue-status .issue-status-bind\")\n\n status = issueStatusById[issue.status]\n\n if status\n issueStatusDom.text(status.name)\n issueStatusDom.prop(\"title\", status.name)\n issueStatusDomParent.css('color', status.color)\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n issue = $scope.$eval($attrs.tgIssueStatusInlineEdition)\n\n $el.on \"click\", \".issue-status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n\n for filter in $scope.filters.status\n if filter.id == issue.status\n filter.count--\n\n issue.status = target.data(\"status-id\")\n $el.find(\".pop-status\").popover().close()\n updateIssueStatus($el, issue, $scope.issueStatusById)\n\n $scope.$apply () ->\n $repo.save(issue).then ->\n $ctrl.loadIssues()\n\n for filter in $scope.filters.status\n if filter.id == issue.status\n filter.count++\n\n $rootscope.$broadcast(\"filters:issueupdate\", $scope.filters)\n\n taiga.bindOnce $scope, \"project\", (project) ->\n $el.append(selectionTemplate({ 'statuses': project.issue_statuses }))\n updateIssueStatus($el, issue, $scope.issueStatusById)\n\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_issue\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$watch $attrs.tgIssueStatusInlineEdition, (val) =>\n updateIssueStatus($el, val, $scope.issueStatusById)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgIssueStatusInlineEdition\", [\"$tgRepo\", \"$tgTemplate\", \"$rootScope\",\n IssueStatusInlineEditionDirective])\n\n\n#############################################################################\n## Issue assigned to Directive\n#############################################################################\n\nIssueAssignedToInlineEditionDirective = ($repo, $rootscope, popoverService) ->\n template = _.template(\"\"\"\n \" alt=\"<%- name %>\"/>\n
<%- name %>
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n updateIssue = (issue) ->\n ctx = {name: \"Unassigned\", imgurl: \"/images/unnamed.png\"}\n member = $scope.usersById[issue.assigned_to]\n if member\n ctx.imgurl = member.photo\n ctx.name = member.full_name_display\n\n $el.find(\".avatar\").html(template(ctx))\n $el.find(\".issue-assignedto\").attr('title', ctx.name)\n\n $ctrl = $el.controller()\n issue = $scope.$eval($attrs.tgIssueAssignedToInlineEdition)\n updateIssue(issue)\n\n $el.on \"click\", \".issue-assignedto\", (event) ->\n $rootscope.$broadcast(\"assigned-to:add\", issue)\n\n taiga.bindOnce $scope, \"project\", (project) ->\n # If the user has not enough permissions the click events are unbinded\n if project.my_permissions.indexOf(\"modify_issue\") == -1\n $el.unbind(\"click\")\n $el.find(\"a\").addClass(\"not-clickable\")\n\n $scope.$on \"assigned-to:added\", (ctx, userId, updatedIssue) =>\n if updatedIssue.id == issue.id\n updatedIssue.assigned_to = userId\n $repo.save(updatedIssue)\n updateIssue(updatedIssue)\n\n $scope.$watch $attrs.tgIssueAssignedToInlineEdition, (val) =>\n updateIssue(val)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgIssueAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\",\n IssueAssignedToInlineEditionDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/userstories/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaUserStories\")\n\n#############################################################################\n## User story Detail Controller\n#############################################################################\n\nclass UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @log, @appMetaService, @navUrls, @analytics, @translate) ->\n bindMethods(@)\n\n @scope.usRef = @params.usref\n @scope.sectionName = @translate.instant(\"US.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n @._setMeta()\n @.initializeOnDeleteGoToUrl()\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n totalTasks = @scope.tasks.length\n closedTasks = _.filter(@scope.tasks, (t) => @scope.taskStatusById[t.status].is_closed).length\n progressPercentage = if totalTasks > 0 then Math.round(100 * closedTasks / totalTasks) else 0\n\n title = @translate.instant(\"US.PAGE_TITLE\", {\n userStoryRef: \"##{@scope.us.ref}\"\n userStorySubject: @scope.us.subject\n projectName: @scope.project.name\n })\n description = @translate.instant(\"US.PAGE_DESCRIPTION\", {\n userStoryStatus: @scope.statusById[@scope.us.status]?.name or \"--\"\n userStoryPoints: @scope.us.total_points\n userStoryDescription: angular.element(@scope.us.description_html or \"\").text()\n userStoryClosedTasks: closedTasks\n userStoryTotalTasks: totalTasks\n userStoryProgressPercentage: progressPercentage\n })\n\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n @scope.$on \"related-tasks:update\", =>\n @scope.tasks = _.clone(@scope.tasks, false)\n\n @scope.$on \"attachment:create\", =>\n @analytics.trackEvent(\"attachment\", \"create\", \"create attachment on userstory\", 1)\n\n @scope.$on \"comment:new\", =>\n @.loadUs()\n\n initializeOnDeleteGoToUrl: ->\n ctx = {project: @scope.project.slug}\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project\", ctx)\n if @scope.project.is_backlog_activated\n if @scope.us.milestone\n ctx.sprint = @scope.sprint.slug\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-taskboard\", ctx)\n else\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-backlog\", ctx)\n else if @scope.project.is_kanban_activated\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-kanban\", ctx)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.statusList = project.us_statuses\n @scope.statusById = groupBy(project.us_statuses, (x) -> x.id)\n @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id)\n @scope.pointsList = _.sortBy(project.points, \"order\")\n @scope.pointsById = groupBy(@scope.pointsList, (e) -> e.id)\n return project\n\n loadUs: ->\n httpParams = _.pick(@location.search(), \"milestone\", \"no-milestone\", \"kanban-status\")\n milestone = httpParams.milestone\n if milestone\n @rs.userstories.storeQueryParams(@scope.projectId, {\n milestone: milestone\n order_by: \"sprint_order\"\n })\n\n noMilestone = httpParams[\"no-milestone\"]\n if noMilestone\n @rs.userstories.storeQueryParams(@scope.projectId, {\n milestone: \"null\"\n order_by: \"backlog_order\"\n })\n\n kanbanStaus = httpParams[\"kanban-status\"]\n if kanbanStaus\n @rs.userstories.storeQueryParams(@scope.projectId, {\n status: kanbanStaus\n order_by: \"kanban_order\"\n })\n\n\n\n return @rs.userstories.getByRef(@scope.projectId, @params.usref).then (us) =>\n @scope.us = us\n @scope.usId = us.id\n @scope.commentModel = us\n\n if @scope.us.neighbors.previous.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.us.neighbors.previous.ref\n }\n @scope.previousUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n\n if @scope.us.neighbors.next.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.us.neighbors.next.ref\n }\n @scope.nextUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n\n return us\n\n loadSprint: ->\n if @scope.us.milestone\n return @rs.sprints.get(@scope.us.project, @scope.us.milestone).then (sprint) =>\n @scope.sprint = sprint\n return sprint\n\n loadTasks: ->\n return @rs.tasks.list(@scope.projectId, null, @scope.usId).then (tasks) =>\n @scope.tasks = tasks\n return tasks\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()]))\n\n ###\n # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n # See app/modules/components/vote-button for more info\n ###\n onUpvote: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.upvote(@scope.usId).then(onSuccess, onError)\n\n onDownvote: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.downvote(@scope.usId).then(onSuccess, onError)\n\n ###\n # Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n # See app/modules/components/watch-button for more info\n ###\n onWatch: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.watch(@scope.usId).then(onSuccess, onError)\n\n onUnwatch: ->\n onSuccess = =>\n @.loadUs()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.userstories.unwatch(@scope.usId).then(onSuccess, onError)\n\nmodule.controller(\"UserStoryDetailController\", UserStoryDetailController)\n\n\n#############################################################################\n## User story status display directive\n#############################################################################\n\nUsStatusDisplayDirective = ($template, $compile) ->\n # Display if a US is open or closed and its kanban status.\n #\n # Example:\n # tg-us-status-display(ng-model=\"us\")\n #\n # Requirements:\n # - US object (ng-model)\n # - scope.statusById object\n\n template = $template.get(\"common/components/status-display.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (us) ->\n status = $scope.statusById[us.status]\n\n html = template({\n is_closed: us.is_closed\n status: status\n })\n\n html = $compile(html)($scope)\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsStatusDisplay\", [\"$tgTemplate\", \"$compile\", UsStatusDisplayDirective])\n\n\n#############################################################################\n## User story related tasts progress splay Directive\n#############################################################################\n\nUsTasksProgressDisplayDirective = ($template, $compile) ->\n # Display a progress bar with the stats of completed tasks.\n #\n # Example:\n # tg-us-tasks-progress-display(ng-model=\"tasks\")\n #\n # Requirements:\n # - Task object list (ng-model)\n # - scope.taskStatusById object\n\n link = ($scope, $el, $attrs) ->\n render = (tasks) ->\n totalTasks = tasks.length\n totalClosedTasks = _.filter(tasks, (task) => $scope.taskStatusById[task.status].is_closed).length\n\n progress = if totalTasks > 0 then 100 * totalClosedTasks / totalTasks else 0\n\n _.assign($scope, {\n totalTasks: totalTasks\n totalClosedTasks: totalClosedTasks\n progress: progress,\n style: {\n width: progress + \"%\"\n }\n })\n\n $scope.$watch $attrs.ngModel, (tasks) ->\n render(tasks) if tasks?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n templateUrl: \"us/us-task-progress.html\"\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n scope: true\n }\n\nmodule.directive(\"tgUsTasksProgressDisplay\", [\"$tgTemplate\", \"$compile\", UsTasksProgressDisplayDirective])\n\n\n#############################################################################\n## User story status button directive\n#############################################################################\n\nUsStatusButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $template) ->\n # Display the status of a US and you can edit it.\n #\n # Example:\n # tg-us-status-button(ng-model=\"us\")\n #\n # Requirements:\n # - Us object (ng-model)\n # - scope.statusById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"us/us-status-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n render = (us) =>\n status = $scope.statusById[us.status]\n\n html = template({\n status: status\n statuses: $scope.statusList\n editable: isEditable()\n })\n\n $el.html(html)\n\n save = $qqueue.bindAdd (status) =>\n us = $model.$modelValue.clone()\n\n us.status = status\n\n $.fn.popover().closeAll()\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $confirm.notify(\"success\")\n $model.$setViewValue(us)\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n\n onError = ->\n $confirm.notify(\"error\")\n currentLoading.finish()\n\n $repo.save(us).then(onSuccess, onError)\n\n $el.on \"click\", \".status-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n status = target.data(\"status-id\")\n\n save(status)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\",\"$tgQqueue\", \"$tgTemplate\",\n UsStatusButtonDirective])\n\n\n#############################################################################\n## User story team requirements button directive\n#############################################################################\n\nUsTeamRequirementButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue, $template, $compile) ->\n template = $template.get(\"us/us-team-requirement-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n canEdit = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n render = (us) ->\n if not canEdit() and not us.team_requirement\n $el.html(\"\")\n return\n\n ctx = {\n canEdit: canEdit()\n isRequired: us.team_requirement\n }\n html = template(ctx)\n html = $compile(html)($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (team_requirement) =>\n us = $model.$modelValue.clone()\n us.team_requirement = team_requirement\n\n currentLoading = $loading()\n .target($el.find(\"label\"))\n .start()\n\n promise = $tgrepo.save(us)\n promise.then =>\n $model.$setViewValue(us)\n currentLoading.finish()\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n currentLoading.finish()\n $confirm.notify(\"error\")\n\n $el.on \"click\", \".team-requirement\", (event) ->\n return if not canEdit()\n\n team_requirement = not $model.$modelValue.team_requirement\n\n save(team_requirement)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsTeamRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\", UsTeamRequirementButtonDirective])\n\n#############################################################################\n## User story client requirements button directive\n#############################################################################\n\nUsClientRequirementButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue, $template, $compile) ->\n template = $template.get(\"us/us-client-requirement-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n canEdit = ->\n return $scope.project.my_permissions.indexOf(\"modify_us\") != -1\n\n render = (us) ->\n if not canEdit() and not us.client_requirement\n $el.html(\"\")\n return\n\n ctx = {\n canEdit: canEdit()\n isRequired: us.client_requirement\n }\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n save = $qqueue.bindAdd (client_requirement) =>\n us = $model.$modelValue.clone()\n us.client_requirement = client_requirement\n\n currentLoading = $loading()\n .target($el.find(\"label\"))\n .start()\n\n promise = $tgrepo.save(us)\n promise.then =>\n $model.$setViewValue(us)\n currentLoading.finish()\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $confirm.notify(\"error\")\n\n $el.on \"click\", \".client-requirement\", (event) ->\n return if not canEdit()\n\n client_requirement = not $model.$modelValue.client_requirement\n save(client_requirement)\n\n $scope.$watch $attrs.ngModel, (us) ->\n render(us) if us\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgUsClientRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\", \"$tgTemplate\", \"$compile\",\n UsClientRequirementButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/tasks/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaTasks\")\n\n\n#############################################################################\n## Task Detail Controller\n#############################################################################\n\nclass TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location,\n @log, @appMetaService, @navUrls, @analytics, @translate) ->\n bindMethods(@)\n\n @scope.taskRef = @params.taskref\n @scope.sectionName = @translate.instant(\"TASK.SECTION_NAME\")\n @.initializeEventHandlers()\n\n promise = @.loadInitialData()\n\n promise.then () =>\n @._setMeta()\n @.initializeOnDeleteGoToUrl()\n\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n title = @translate.instant(\"TASK.PAGE_TITLE\", {\n taskRef: \"##{@scope.task.ref}\"\n taskSubject: @scope.task.subject\n projectName: @scope.project.name\n })\n description = @translate.instant(\"TASK.PAGE_DESCRIPTION\", {\n taskStatus: @scope.statusById[@scope.task.status]?.name or \"--\"\n taskDescription: angular.element(@scope.task.description_html or \"\").text()\n })\n @appMetaService.setAll(title, description)\n\n initializeEventHandlers: ->\n @scope.$on \"attachment:create\", =>\n @analytics.trackEvent(\"attachment\", \"create\", \"create attachment on task\", 1)\n @scope.$on \"custom-attributes-values:edit\", =>\n @rootscope.$broadcast(\"object:updated\")\n @scope.$on \"comment:new\", =>\n @.loadTask()\n\n initializeOnDeleteGoToUrl: ->\n ctx = {project: @scope.project.slug}\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project\", ctx)\n if @scope.project.is_backlog_activated\n if @scope.task.milestone\n ctx.sprint = @scope.sprint.slug\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-taskboard\", ctx)\n else if @scope.task.us\n ctx.ref = @scope.us.ref\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n else if @scope.project.is_kanban_activated\n if @scope.us\n ctx.ref = @scope.us.ref\n @scope.onDeleteGoToUrl = @navUrls.resolve(\"project-userstories-detail\", ctx)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.statusList = project.task_statuses\n @scope.statusById = groupBy(project.task_statuses, (x) -> x.id)\n return project\n\n loadTask: ->\n return @rs.tasks.getByRef(@scope.projectId, @params.taskref).then (task) =>\n @scope.task = task\n @scope.taskId = task.id\n @scope.commentModel = task\n\n if @scope.task.neighbors.previous.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.task.neighbors.previous.ref\n }\n @scope.previousUrl = @navUrls.resolve(\"project-tasks-detail\", ctx)\n\n if @scope.task.neighbors.next.ref?\n ctx = {\n project: @scope.project.slug\n ref: @scope.task.neighbors.next.ref\n }\n @scope.nextUrl = @navUrls.resolve(\"project-tasks-detail\", ctx)\n return task\n\n loadSprint: ->\n if @scope.task.milestone\n return @rs.sprints.get(@scope.task.project, @scope.task.milestone).then (sprint) =>\n @scope.sprint = sprint\n return sprint\n\n loadUserStory: ->\n if @scope.task.user_story\n return @rs.userstories.get(@scope.task.project, @scope.task.user_story).then (us) =>\n @scope.us = us\n return us\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()]))\n\n ###\n # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n # See app/modules/components/vote-button for more info\n ###\n onUpvote: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.upvote(@scope.taskId).then(onSuccess, onError)\n\n onDownvote: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.downvote(@scope.taskId).then(onSuccess, onError)\n\n ###\n # Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n # See app/modules/components/watch-button for more info\n ###\n onWatch: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.watch(@scope.taskId).then(onSuccess, onError)\n\n onUnwatch: ->\n onSuccess = =>\n @.loadTask()\n @rootscope.$broadcast(\"object:updated\")\n onError = =>\n @confirm.notify(\"error\")\n\n return @rs.tasks.unwatch(@scope.taskId).then(onSuccess, onError)\n\nmodule.controller(\"TaskDetailController\", TaskDetailController)\n\n\n#############################################################################\n## Task status display directive\n#############################################################################\n\nTaskStatusDisplayDirective = ($template, $compile) ->\n # Display if a Task is open or closed and its taskboard status.\n #\n # Example:\n # tg-task-status-display(ng-model=\"task\")\n #\n # Requirements:\n # - Task object (ng-model)\n # - scope.statusById object\n\n template = $template.get(\"common/components/status-display.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (task) ->\n status = $scope.statusById[task.status]\n\n html = template({\n is_closed: status.is_closed\n status: status\n })\n\n html = $compile(html)($scope)\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (task) ->\n render(task) if task?\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgTaskStatusDisplay\", [\"$tgTemplate\", \"$compile\", TaskStatusDisplayDirective])\n\n\n#############################################################################\n## Task status button directive\n#############################################################################\n\nTaskStatusButtonDirective = ($rootScope, $repo, $confirm, $loading, $qqueue, $compile, $translate, $template) ->\n # Display the status of Task and you can edit it.\n #\n # Example:\n # tg-task-status-button(ng-model=\"task\")\n #\n # Requirements:\n # - Task object (ng-model)\n # - scope.statusById object\n # - $scope.project.my_permissions\n\n template = $template.get(\"us/us-status-button.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_task\") != -1\n\n render = (task) =>\n status = $scope.statusById[task.status]\n\n html = $compile(template({\n status: status\n statuses: $scope.statusList\n editable: isEditable()\n }))($scope)\n\n $el.html(html)\n\n save = $qqueue.bindAdd (status) =>\n task = $model.$modelValue.clone()\n task.status = status\n\n currentLoading = $loading()\n .target($el.find(\".level-name\"))\n .start()\n\n onSuccess = ->\n $model.$setViewValue(task)\n $confirm.notify(\"success\")\n $rootScope.$broadcast(\"object:updated\")\n currentLoading.finish()\n\n onError = ->\n $confirm.notify(\"error\")\n currentLoading.finish()\n\n $repo.save(task).then(onSuccess, onError)\n\n $el.on \"click\", \".status-data\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n $el.find(\".pop-status\").popover().open()\n\n $el.on \"click\", \".status\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n return if not isEditable()\n\n target = angular.element(event.currentTarget)\n\n $.fn.popover().closeAll()\n\n save(target.data(\"status-id\"))\n\n $scope.$watch $attrs.ngModel, (task) ->\n render(task) if task\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgTaskStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\",\n \"$compile\", \"$translate\", \"$tgTemplate\", TaskStatusButtonDirective])\n\n\nTaskIsIocaineButtonDirective = ($rootscope, $tgrepo, $confirm, $loading, $qqueue, $compile) ->\n template = _.template(\"\"\"\n
\n \n \n
\n \"\"\")\n\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_task\") != -1\n\n render = (task) ->\n if not isEditable() and not task.is_iocaine\n $el.html(\"\")\n return\n\n ctx = {\n isIocaine: task.is_iocaine\n isEditable: isEditable()\n }\n html = $compile(template(ctx))($scope)\n $el.html(html)\n\n save = $qqueue.bindAdd (is_iocaine) =>\n task = $model.$modelValue.clone()\n task.is_iocaine = is_iocaine\n\n currentLoading = $loading()\n .target($el.find('label'))\n .start()\n\n promise = $tgrepo.save(task)\n\n promise.then ->\n $model.$setViewValue(task)\n $confirm.notify(\"success\")\n $rootscope.$broadcast(\"object:updated\")\n\n promise.then null, ->\n $confirm.notify(\"error\")\n\n promise.finally ->\n currentLoading.finish()\n\n $el.on \"click\", \".is-iocaine\", (event) ->\n return if not isEditable()\n\n is_iocaine = not $model.$modelValue.is_iocaine\n save(is_iocaine)\n\n $scope.$watch $attrs.ngModel, (task) ->\n render(task) if task\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgTaskIsIocaineButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQqueue\",\n \"$compile\", TaskIsIocaineButtonDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/team/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\n\nmodule = angular.module(\"taigaTeam\")\n\n#############################################################################\n## Team Controller\n#############################################################################\n\nclass TeamController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$location\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$tgAuth\",\n \"$translate\",\n \"tgProjectService\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appMetaService, @auth,\n @translate, @projectService) ->\n @scope.sectionName = \"TEAM.SECTION_NAME\"\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then =>\n title = @translate.instant(\"TEAM.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @translate.instant(\"TEAM.PAGE_DESCRIPTION\", {\n projectName: @scope.project.name,\n projectDescription: @scope.project.description\n })\n @appMetaService.setAll(title, description)\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n setRole: (role) ->\n if role\n @scope.filtersRole = role\n else\n @scope.filtersRole = null\n\n loadMembers: ->\n user = @auth.getUser()\n\n # Calculate totals\n @scope.totals = {}\n for member in @scope.activeUsers\n @scope.totals[member.id] = 0\n\n # Get current user\n @scope.currentUser = _.find(@scope.activeUsers, {id: user?.id})\n\n # Get member list without current user\n @scope.memberships = _.reject(@scope.activeUsers, {id: user?.id})\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n\n @scope.issuesEnabled = project.is_issues_activated\n @scope.tasksEnabled = project.is_kanban_activated or project.is_backlog_activated\n @scope.wikiEnabled = project.is_wiki_activated\n\n return project\n\n loadMemberStats: ->\n return @rs.projects.memberStats(@scope.projectId).then (stats) =>\n totals = {}\n _.forEach @scope.totals, (total, userId) =>\n vals = _.map(stats, (memberStats, statsKey) -> memberStats[userId])\n total = _.reduce(vals, (sum, el) -> sum + el)\n @scope.totals[userId] = total\n\n @scope.stats = @._processStats(stats)\n @scope.stats.totals = @scope.totals\n\n _processStat: (stat) ->\n max = _.max(stat)\n min = _.min(stat)\n singleStat = _.map stat, (value, key) ->\n if value == min\n return [key, 0.1]\n if value == max\n return [key, 1]\n return [key, (value * 0.5) / max]\n singleStat = _.object(singleStat)\n return singleStat\n\n _processStats: (stats) ->\n for key,value of stats\n stats[key] = @._processStat(value)\n return stats\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @.loadMembers()\n return @.loadMemberStats()\n\nmodule.controller(\"TeamController\", TeamController)\n\n\n#############################################################################\n## Team Filters Directive\n#############################################################################\n\nTeamFiltersDirective = () ->\n return {\n templateUrl: \"team/team-filter.html\"\n }\n\nmodule.directive(\"tgTeamFilters\", [TeamFiltersDirective])\n\n\n#############################################################################\n## Team Member Stats Directive\n#############################################################################\n\nTeamMemberStatsDirective = () ->\n return {\n templateUrl: \"team/team-member-stats.html\",\n scope: {\n stats: \"=\",\n userId: \"=user\"\n issuesEnabled: \"=issuesenabled\"\n tasksEnabled: \"=tasksenabled\"\n wikiEnabled: \"=wikienabled\"\n }\n }\n\nmodule.directive(\"tgTeamMemberStats\", TeamMemberStatsDirective)\n\n\n#############################################################################\n## Team Current User Directive\n#############################################################################\n\nTeamMemberCurrentUserDirective = () ->\n return {\n templateUrl: \"team/team-member-current-user.html\"\n scope: {\n projectId: \"=projectid\",\n currentUser: \"=currentuser\",\n stats: \"=\"\n issuesEnabled: \"=issuesenabled\"\n tasksEnabled: \"=tasksenabled\"\n wikiEnabled: \"=wikienabled\"\n }\n }\n\nmodule.directive(\"tgTeamCurrentUser\", TeamMemberCurrentUserDirective)\n\n\n#############################################################################\n## Team Members Directive\n#############################################################################\n\nTeamMembersDirective = () ->\n template = \"team/team-members.html\"\n\n return {\n templateUrl: template\n scope: {\n memberships: \"=\",\n filtersQ: \"=filtersq\",\n filtersRole: \"=filtersrole\",\n stats: \"=\"\n issuesEnabled: \"=issuesenabled\"\n tasksEnabled: \"=tasksenabled\"\n wikiEnabled: \"=wikienabled\"\n }\n }\n\nmodule.directive(\"tgTeamMembers\", TeamMembersDirective)\n\n\n#############################################################################\n## Leave project Directive\n#############################################################################\n\nLeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate) ->\n link = ($scope, $el, $attrs) ->\n $scope.leave = () ->\n leave_project_text = $translate.instant(\"TEAM.ACTION_LEAVE_PROJECT\")\n confirm_leave_project_text = $translate.instant(\"TEAM.CONFIRM_LEAVE_PROJECT\")\n\n $confirm.ask(leave_project_text, confirm_leave_project_text).then (response) =>\n promise = $rs.projects.leave($attrs.projectid)\n\n promise.then =>\n response.finish()\n $confirm.notify(\"success\")\n $location.path($navurls.resolve(\"home\"))\n\n promise.then null, (response) ->\n response.finish()\n $confirm.notify('error', response.data._error_message)\n\n return {\n scope: {},\n templateUrl: \"team/leave-project.html\",\n link: link\n }\n\nmodule.directive(\"tgLeaveProject\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgResources\", \"$tgNavUrls\", \"$translate\",\n LeaveProjectDirective])\n\n\n#############################################################################\n## Team Filters\n#############################################################################\n\nmembersFilter = ->\n return (members, filtersQ, filtersRole) ->\n return _.filter members, (m) -> (not filtersRole or m.role == filtersRole.id) and\n (not filtersQ or m.full_name.search(new RegExp(filtersQ, \"i\")) >= 0)\n\nmodule.filter('membersFilter', membersFilter)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/wiki/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaWiki\")\n\n#############################################################################\n## Wiki Detail Controller\n#############################################################################\n\nclass WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgModel\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$filter\",\n \"$log\",\n \"tgAppMetaService\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @model, @confirm, @rs, @params, @q, @location,\n @filter, @log, @appMetaService, @navUrls, @analytics, @translate) ->\n @scope.projectSlug = @params.pslug\n @scope.wikiSlug = @params.slug\n @scope.wikiTitle = @scope.wikiSlug\n @scope.sectionName = \"Wiki\"\n\n promise = @.loadInitialData()\n\n # On Success\n promise.then () => @._setMeta()\n\n # On Error\n promise.then null, @.onInitialDataError.bind(@)\n\n _setMeta: ->\n title = @translate.instant(\"WIKI.PAGE_TITLE\", {\n wikiPageName: @scope.wikiTitle\n projectName: @scope.project.name\n })\n description = @translate.instant(\"WIKI.PAGE_DESCRIPTION\", {\n wikiPageContent: angular.element(@scope.wiki.html or \"\").text()\n totalEditions: @scope.wiki.editions or 0\n lastModifiedDate: moment(@scope.wiki.modified_date).format(@translate.instant(\"WIKI.DATETIME\"))\n })\n @appMetaService.setAll(title, description)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.is_wiki_activated\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadWiki: ->\n promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug)\n promise.then (wiki) =>\n @scope.wiki = wiki\n @scope.wikiId = wiki.id\n return @scope.wiki\n\n promise.then null, (xhr) =>\n @scope.wikiId = null\n\n if @scope.project.my_permissions.indexOf(\"add_wiki_page\") == -1\n return null\n\n data = {\n project: @scope.projectId\n slug: @scope.wikiSlug\n content: \"\"\n }\n @scope.wiki = @model.make_model(\"wiki\", data)\n return @scope.wiki\n\n loadWikiLinks: ->\n return @rs.wiki.listLinks(@scope.projectId).then (wikiLinks) =>\n @scope.wikiLinks = wikiLinks\n selectedWikiLink = _.find(wikiLinks, {href: @scope.wikiSlug})\n @scope.wikiTitle = selectedWikiLink.title if selectedWikiLink?\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise.then (project) =>\n @.fillUsersAndRoles(project.members, project.roles)\n @q.all([@.loadWikiLinks(), @.loadWiki()]).then () =>\n\n\n delete: ->\n title = @translate.instant(\"WIKI.DELETE_LIGHTBOX_TITLE\")\n message = @scope.wikiTitle\n\n @confirm.askOnDelete(title, message).then (askResponse) =>\n onSuccess = =>\n askResponse.finish()\n ctx = {project: @scope.projectSlug}\n @location.path(@navUrls.resolve(\"project-wiki\", ctx))\n @confirm.notify(\"success\")\n\n onError = =>\n askResponse.finish(false)\n @confirm.notify(\"error\")\n\n @repo.remove(@scope.wiki).then onSuccess, onError\n\nmodule.controller(\"WikiDetailController\", WikiDetailController)\n\n\n#############################################################################\n## Wiki Summary Directive\n#############################################################################\n\nWikiSummaryDirective = ($log, $template, $compile, $translate) ->\n template = $template.get(\"wiki/wiki-summary.html\", true)\n\n link = ($scope, $el, $attrs, $model) ->\n render = (wiki) ->\n if not $scope.usersById?\n $log.error \"WikiSummaryDirective requires userById set in scope.\"\n else\n user = $scope.usersById[wiki.last_modifier]\n\n if user is undefined\n user = {name: \"unknown\", imgUrl: \"/images/user-noimage.png\"}\n else\n user = {name: user.full_name_display, imgUrl: user.photo}\n\n ctx = {\n totalEditions: wiki.editions\n lastModifiedDate: moment(wiki.modified_date).format($translate.instant(\"WIKI.DATETIME\"))\n user: user\n }\n html = template(ctx)\n html = $compile(html)($scope)\n $el.html(html)\n\n $scope.$watch $attrs.ngModel, (wikiPage) ->\n return if not wikiPage\n render(wikiPage)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgWikiSummary\", [\"$log\", \"$tgTemplate\", \"$compile\", \"$translate\", WikiSummaryDirective])\n\n\n#############################################################################\n## Editable Wiki Content Directive\n#############################################################################\n\nEditableWikiContentDirective = ($window, $document, $repo, $confirm, $loading, $analytics, $qqueue) ->\n link = ($scope, $el, $attrs, $model) ->\n isEditable = ->\n return $scope.project.my_permissions.indexOf(\"modify_wiki_page\") != -1\n\n switchToEditMode = ->\n $el.find('.edit-wiki-content').show()\n $el.find('.view-wiki-content').hide()\n $el.find('textarea').focus()\n\n switchToReadMode = ->\n $el.find('.edit-wiki-content').hide()\n $el.find('.view-wiki-content').show()\n\n disableEdition = ->\n $el.find(\".view-wiki-content .edit\").remove()\n $el.find(\".edit-wiki-content\").remove()\n\n cancelEdition = ->\n return if not $model.$modelValue.id\n\n $scope.$apply () =>\n $model.$modelValue.revert()\n switchToReadMode()\n\n getSelectedText = ->\n if $window.getSelection\n return $window.getSelection().toString()\n else if $document.selection\n return $document.selection.createRange().text\n return null\n\n save = $qqueue.bindAdd (wiki) ->\n onSuccess = (wikiPage) ->\n if not wiki.id?\n $analytics.trackEvent(\"wikipage\", \"create\", \"create wiki page\", 1)\n\n $model.$setViewValue wikiPage.clone()\n\n $confirm.notify(\"success\")\n switchToReadMode()\n\n onError = ->\n $confirm.notify(\"error\")\n\n currentLoading = $loading()\n .removeClasses(\"icon-floppy\")\n .target($el.find('.icon-floppy'))\n .start()\n\n if wiki.id?\n promise = $repo.save(wiki).then(onSuccess, onError)\n else\n promise = $repo.create(\"wiki\", wiki).then(onSuccess, onError)\n\n promise.finally ->\n currentLoading.finish()\n\n $el.on \"click\", \"a\", (event) ->\n target = angular.element(event.target)\n href = target.attr('href')\n if href.indexOf(\"#\") == 0\n event.preventDefault()\n $('body').scrollTop($(href).offset().top)\n\n $el.on \"mousedown\", \".view-wiki-content\", (event) ->\n target = angular.element(event.target)\n return if not isEditable()\n return if event.button == 2\n\n $el.on \"mouseup\", \".view-wiki-content\", (event) ->\n target = angular.element(event.target)\n return if getSelectedText()\n return if not isEditable()\n return if target.is('a')\n return if target.is('pre')\n\n switchToEditMode()\n\n $el.on \"click\", \".save\", debounce 2000, ->\n save($scope.wiki)\n\n $el.on \"click\", \".cancel\", ->\n cancelEdition()\n\n $el.on \"keydown\", \"textarea\", (event) ->\n if event.keyCode == 27\n cancelEdition()\n\n $scope.$watch $attrs.ngModel, (wikiPage) ->\n return if not wikiPage\n\n if isEditable()\n $el.addClass('editable')\n if not wikiPage.id? or $.trim(wikiPage.content).length == 0\n switchToEditMode()\n else\n disableEdition()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n templateUrl: \"wiki/editable-wiki-content.html\"\n }\n\nmodule.directive(\"tgEditableWikiContent\", [\"$window\", \"$document\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\",\n \"$tgAnalytics\", \"$tgQqueue\", EditableWikiContentDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/wiki/detail.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaWiki\")\n\n\n#############################################################################\n## Wiki Main Directive\n#############################################################################\n\nWikiNavDirective = ($tgrepo, $log, $location, $confirm, $navUrls, $analytics, $loading, $template, $compile, $translate) ->\n template = $template.get(\"wiki/wiki-nav.html\", true)\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n if not $attrs.ngModel?\n return $log.error \"WikiNavDirective: no ng-model attr is defined\"\n\n render = (wikiLinks) ->\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1\n deleteWikiLinkPermission = $scope.project.my_permissions.indexOf(\"delete_wiki_link\") > -1\n\n html = template({\n wikiLinks: wikiLinks,\n projectSlug: $scope.projectSlug\n addWikiLinkPermission: addWikiLinkPermission\n deleteWikiLinkPermission: deleteWikiLinkPermission\n })\n\n html = $compile(html)($scope)\n\n $el.off()\n $el.html(html)\n\n $el.on \"click\", \".wiki-link .link-title\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n linkId = target.parents('.wiki-link').data('id')\n linkSlug = $scope.wikiLinks[linkId].href\n $scope.$apply ->\n ctx = {\n project: $scope.projectSlug\n slug: linkSlug\n }\n $location.path($navUrls.resolve(\"project-wiki-page\", ctx))\n\n $el.on \"click\", \".add-button\", (event) ->\n event.preventDefault()\n $el.find(\".new\").removeClass(\"hidden\")\n $el.find(\".new input\").focus()\n $el.find(\".add-button\").hide()\n\n $el.on \"click\", \".wiki-link .icon-delete\", (event) ->\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n linkId = target.parents('.wiki-link').data('id')\n\n title = $translate.instant(\"WIKI.DELETE_LIGHTBOX_TITLE\")\n message = $scope.wikiLinks[linkId].title\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n promise = $tgrepo.remove($scope.wikiLinks[linkId])\n promise.then ->\n promise = $ctrl.loadWikiLinks()\n promise.then ->\n askResponse.finish()\n render($scope.wikiLinks)\n promise.then null, ->\n askResponse.finish()\n promise.then null, ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $el.on \"keyup\", \".new input\", (event) ->\n event.preventDefault()\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n newLink = target.val()\n\n currentLoading = $loading()\n .target($el.find(\".new\"))\n .start()\n\n promise = $tgrepo.create(\"wiki-links\", {project: $scope.projectId, title: newLink})\n promise.then ->\n $analytics.trackEvent(\"wikilink\", \"create\", \"create wiki link\", 1)\n loadPromise = $ctrl.loadWikiLinks()\n loadPromise.then ->\n currentLoading.finish()\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new input\").val('')\n $el.find(\".add-button\").show()\n render($scope.wikiLinks)\n loadPromise.then null, ->\n currentLoading.finish()\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new input\").val('')\n $el.find(\".add-button\").show()\n $confirm.notify(\"error\", \"Error loading wiki links\")\n\n promise.then null, (error) ->\n currentLoading.finish()\n $el.find(\".new input\").val(newLink)\n $el.find(\".new input\").focus().select()\n if error?.__all__?[0]?\n $confirm.notify(\"error\", \"The link already exists\")\n else\n $confirm.notify(\"error\")\n\n else if event.keyCode == 27\n target = angular.element(event.currentTarget)\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new input\").val('')\n $el.find(\".add-button\").show()\n\n\n bindOnce($scope, $attrs.ngModel, render)\n\n return {link:link}\n\nmodule.directive(\"tgWikiNav\", [\"$tgRepo\", \"$log\", \"$tgLocation\", \"$tgConfirm\", \"$tgNavUrls\",\n \"$tgAnalytics\", \"$tgLoading\", \"$tgTemplate\", \"$compile\", \"$translate\", WikiNavDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/lightboxes.coffee\n###\n\ntaiga = @.taiga\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaKanban\")\n\nMAX_MEMBERSHIP_FIELDSETS = 4\n\n#############################################################################\n## Create Members Lightbox Directive\n#############################################################################\n\nCreateMembersDirective = ($rs, $rootScope, $confirm, $loading, lightboxService, $compile) ->\n extraTextTemplate = \"\"\"\n
\n \n
\n \"\"\"\n\n template = _.template(\"\"\"\n
\n
\n data-required=\"true\" <% } %> data-type=\"email\" />\n
\n
\n \n \n
\n
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n createFieldSet = (required = true)->\n ctx = {roleList: $scope.project.roles, required: required}\n return $compile(template(ctx))($scope)\n\n resetForm = ->\n $el.find(\"form textarea\").remove()\n $el.find(\"form .add-member-wrapper\").remove()\n\n invitations = $el.find(\".add-member-forms\")\n invitations.html($compile(extraTextTemplate)($scope))\n\n fieldSet = createFieldSet()\n invitations.prepend(fieldSet)\n\n $scope.$on \"membersform:new\", ->\n resetForm()\n lightboxService.open($el)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $el.on \"click\", \".delete-fieldset\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n fieldSet = target.closest('.add-member-wrapper')\n\n fieldSet.remove()\n\n lastActionButton = $el.find(\".add-member-wrapper fieldset:last > a\")\n if lastActionButton.hasClass(\"icon-delete delete-fieldset\")\n lastActionButton.removeClass(\"icon-delete delete-fieldset\")\n .addClass(\"icon-plus add-fieldset\")\n\n $el.on \"click\", \".add-fieldset\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n fieldSet = target.closest('.add-member-wrapper')\n\n target.removeClass(\"icon-plus add-fieldset\")\n .addClass(\"icon-delete delete-fieldset\")\n\n newFieldSet = createFieldSet(false)\n fieldSet.after(newFieldSet)\n\n $scope.$digest() # To compile newFieldSet and translate text\n\n if $el.find(\".add-member-wrapper\").length == MAX_MEMBERSHIP_FIELDSETS\n $el.find(\".add-member-wrapper fieldset:last > a\").removeClass(\"icon-plus add-fieldset\")\n .addClass(\"icon-delete delete-fieldset\")\n\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n onSuccess = (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $confirm.notify(\"success\")\n $rootScope.$broadcast(\"membersform:new:success\")\n\n onError = (data) ->\n currentLoading.finish()\n lightboxService.close($el)\n $confirm.notify(\"error\")\n $rootScope.$broadcast(\"membersform:new:error\")\n\n form = $el.find(\"form\").checksley()\n\n #checksley find new fields\n form.destroy()\n form.initialize()\n if not form.validate()\n return\n\n memberWrappers = $el.find(\"form .add-member-wrapper\")\n memberWrappers = _.filter memberWrappers, (mw) ->\n angular.element(mw).find(\"input\").hasClass('checksley-ok')\n\n invitations = _.map memberWrappers, (mw) ->\n memberWrapper = angular.element(mw)\n email = memberWrapper.find(\"input\")\n role = memberWrapper.find(\"select\")\n\n return {\n email: email.val()\n role_id: role.val()\n }\n\n if invitations.length\n invitation_extra_text = $el.find(\"form textarea\").val()\n\n promise = $rs.memberships.bulkCreateMemberships($scope.project.id,\n invitations, invitation_extra_text)\n promise.then(onSuccess, onError)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link: link}\n\nmodule.directive(\"tgLbCreateMembers\", [\"$tgResources\", \"$rootScope\", \"$tgConfirm\", \"$tgLoading\",\n \"lightboxService\", \"$compile\", CreateMembersDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/memberships.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Project Memberships Controller\n#############################################################################\n\nclass MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAnalytics\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @analytics,\n @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.project = {}\n @scope.filters = {}\n\n promise = @.loadInitialData()\n\n promise.then =>\n title = @translate.instant(\"ADMIN.MEMBERSHIPS.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"membersform:new:success\", =>\n @.loadMembers()\n @analytics.trackEvent(\"membership\", \"create\", \"create memberships on admin\", 1)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadMembers: ->\n httpFilters = @.getUrlFilters()\n return @rs.memberships.list(@scope.projectId, httpFilters).then (data) =>\n @scope.memberships = _.filter(data.models, (membership) ->\n membership.user == null or membership.is_user_active)\n\n @scope.page = data.current\n @scope.count = data.count\n @scope.paginatedBy = data.paginatedBy\n return data\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then =>\n @.loadMembers()\n\n return promise\n\n getUrlFilters: ->\n filters = _.pick(@location.search(), \"page\")\n filters.page = 1 if not filters.page\n return filters\n\n addNewMembers: ->\n @rootscope.$broadcast(\"membersform:new\")\n\n\nmodule.controller(\"MembershipsController\", MembershipsController)\n\n\n#############################################################################\n## Member Avatar Directive\n#############################################################################\n\nMembershipsDirective = ($template, $compile) ->\n template = $template.get(\"admin/admin-membership-paginator.html\", true)\n\n linkPagination = ($scope, $el, $attrs, $ctrl) ->\n # Constants\n afterCurrent = 2\n beforeCurrent = 4\n atBegin = 2\n atEnd = 2\n\n $pagEl = $el.find(\".memberships-paginator\")\n\n getNumPages = ->\n numPages = $scope.count / $scope.paginatedBy\n if parseInt(numPages, 10) < numPages\n numPages = parseInt(numPages, 10) + 1\n else\n numPages = parseInt(numPages, 10)\n\n return numPages\n\n renderPagination = ->\n numPages = getNumPages()\n\n if numPages <= 1\n $pagEl.hide()\n return\n\n pages = []\n options = {}\n options.pages = pages\n options.showPrevious = ($scope.page > 1)\n options.showNext = not ($scope.page == numPages)\n\n cpage = $scope.page\n\n for i in [1..numPages]\n if i == (cpage + afterCurrent) and numPages > (cpage + afterCurrent + atEnd)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i == (cpage - beforeCurrent) and cpage > (atBegin + beforeCurrent)\n pages.push({classes: \"dots\", type: \"dots\"})\n else if i > (cpage + afterCurrent) and i <= (numPages - atEnd)\n else if i < (cpage - beforeCurrent) and i > atBegin\n else if i == cpage\n pages.push({classes: \"active\", num: i, type: \"page-active\"})\n else\n pages.push({classes: \"page\", num: i, type: \"page\"})\n\n html = template(options)\n html = $compile(html)($scope)\n\n $pagEl.html(html)\n $pagEl.show()\n\n $scope.$watch \"memberships\", (value) ->\n # Do nothing if value is not logical true\n return if not value\n\n renderPagination()\n\n $el.on \"click\", \".memberships-paginator a.next\", (event) ->\n event.preventDefault()\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page + 1)\n $ctrl.loadMembers()\n\n $el.on \"click\", \".memberships-paginator a.previous\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", $scope.page - 1)\n $ctrl.loadMembers()\n\n $el.on \"click\", \".memberships-paginator li.page > a\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n pagenum = target.data(\"pagenum\")\n\n $scope.$apply ->\n $ctrl.selectFilter(\"page\", pagenum)\n $ctrl.loadMembers()\n\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n linkPagination($scope, $el, $attrs, $ctrl)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgMemberships\", [\"$tgTemplate\", \"$compile\", MembershipsDirective])\n\n\n#############################################################################\n## Member Avatar Directive\n#############################################################################\n\nMembershipsRowAvatarDirective = ($log, $template, $translate) ->\n template = $template.get(\"admin/memberships-row-avatar.html\", true)\n\n link = ($scope, $el, $attrs) ->\n pending = $translate.instant(\"ADMIN.MEMBERSHIP.STATUS_PENDING\")\n render = (member) ->\n ctx = {\n full_name: if member.full_name then member.full_name else \"\"\n email: if member.user_email then member.user_email else member.email\n imgurl: if member.photo then member.photo else \"/images/unnamed.png\"\n pending: if !member.is_user_active then pending else \"\"\n }\n\n html = template(ctx)\n $el.html(html)\n\n if not $attrs.tgMembershipsRowAvatar?\n return $log.error \"MembershipsRowAvatarDirective: the directive need a member\"\n\n member = $scope.$eval($attrs.tgMembershipsRowAvatar)\n render(member)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowAvatar\", [\"$log\", \"$tgTemplate\", '$translate', MembershipsRowAvatarDirective])\n\n\n#############################################################################\n## Member IsAdminCheckbox Directive\n#############################################################################\n\nMembershipsRowAdminCheckboxDirective = ($log, $repo, $confirm, $template, $compile) ->\n template = $template.get(\"admin/admin-memberships-row-checkbox.html\", true)\n\n link = ($scope, $el, $attrs) ->\n render = (member) ->\n ctx = {inputId: \"is-admin-#{member.id}\"}\n\n html = template(ctx)\n html = $compile(html)($scope)\n\n $el.html(html)\n\n if not $attrs.tgMembershipsRowAdminCheckbox?\n return $log.error \"MembershipsRowAdminCheckboxDirective: the directive need a member\"\n\n member = $scope.$eval($attrs.tgMembershipsRowAdminCheckbox)\n html = render(member)\n\n if member.is_owner\n $el.find(\":checkbox\").prop(\"checked\", true)\n\n $el.on \"click\", \":checkbox\", (event) =>\n onSuccess = ->\n $confirm.notify(\"success\")\n\n onError = (data) ->\n member.revert()\n $el.find(\":checkbox\").prop(\"checked\", member.is_owner)\n $confirm.notify(\"error\", data.is_owner[0])\n\n target = angular.element(event.currentTarget)\n member.is_owner = target.prop(\"checked\")\n $repo.save(member).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowAdminCheckbox\", [\"$log\", \"$tgRepo\", \"$tgConfirm\",\n \"$tgTemplate\", \"$compile\", MembershipsRowAdminCheckboxDirective])\n\n\n#############################################################################\n## Member RoleSelector Directive\n#############################################################################\n\nMembershipsRowRoleSelectorDirective = ($log, $repo, $confirm) ->\n template = _.template(\"\"\"\n \n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n render = (member) ->\n ctx = {\n roleList: $scope.project.roles,\n selectedRole: member.role\n }\n\n html = template(ctx)\n $el.html(html)\n\n if not $attrs.tgMembershipsRowRoleSelector?\n return $log.error \"MembershipsRowRoleSelectorDirective: the directive need a member\"\n\n $ctrl = $el.controller()\n member = $scope.$eval($attrs.tgMembershipsRowRoleSelector)\n html = render(member)\n\n $el.on \"change\", \"select\", (event) =>\n onSuccess = ->\n $confirm.notify(\"success\")\n\n onError = ->\n $confirm.notify(\"error\")\n\n target = angular.element(event.currentTarget)\n newRole = parseInt(target.val(), 10)\n\n if member.role != newRole\n member.role = newRole\n $repo.save(member).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowRoleSelector\", [\"$log\", \"$tgRepo\", \"$tgConfirm\",\n MembershipsRowRoleSelectorDirective])\n\n\n#############################################################################\n## Member Actions Directive\n#############################################################################\n\nMembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $translate) ->\n activedTemplate = \"\"\"\n
\n
\n \n \n \n \"\"\"\n\n pendingTemplate = \"\"\"\n \n {{'ADMIN.MEMBERSHIP.RESEND' | translate}}\n \n \n \n \n \"\"\"\n\n link = ($scope, $el, $attrs) ->\n render = (member) ->\n if member.user\n html = $compile(activedTemplate)($scope)\n else\n html = $compile(pendingTemplate)($scope)\n\n $el.html(html)\n\n if not $attrs.tgMembershipsRowActions?\n return $log.error \"MembershipsRowActionsDirective: the directive need a member\"\n\n $ctrl = $el.controller()\n member = $scope.$eval($attrs.tgMembershipsRowActions)\n render(member)\n\n $el.on \"click\", \".pending\", (event) ->\n event.preventDefault()\n onSuccess = ->\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_SEND_INVITATION\", {\n email: $scope.member.email\n })\n $confirm.notify(\"success\", text)\n onError = ->\n text = $translate.instant(\"ADMIM.MEMBERSHIP.ERROR_SEND_INVITATION\")\n $confirm.notify(\"error\", text)\n\n $rs.memberships.resendInvitation($scope.member.id).then(onSuccess, onError)\n\n $el.on \"click\", \".delete\", (event) ->\n event.preventDefault()\n\n title = $translate.instant(\"ADMIN.MEMBERSHIP.DELETE_MEMBER\")\n defaultMsg = $translate.instant(\"ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE\", {email: member.email})\n message = if member.user then member.full_name else defaultMsg\n\n $confirm.askOnDelete(title, message).then (askResponse) ->\n onSuccess = =>\n askResponse.finish()\n\n if $scope.page > 1 && ($scope.count - 1) <= $scope.paginatedBy\n $ctrl.selectFilter(\"page\", $scope.page - 1)\n\n $ctrl.loadMembers()\n\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_DELETE\")\n $confirm.notify(\"success\", null, text)\n\n onError = =>\n askResponse.finish(false)\n\n text = $translate.instant(\"ADMIN.MEMBERSHIP.ERROR_DELETE\", {message: message})\n $confirm.notify(\"error\", null, text)\n\n $repo.remove(member).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\n\nmodule.directive(\"tgMembershipsRowActions\", [\"$log\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$compile\",\n \"$translate\", MembershipsRowActionsDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/nav.coffee\n###\n\nAdminNavigationDirective = ->\n link = ($scope, $el, $attrs) ->\n section = $attrs.tgAdminNavigation\n $el.find(\".active\").removeClass(\"active\")\n $el.find(\"#adminmenu-#{section} a\").addClass(\"active\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule = angular.module(\"taigaAdmin\")\nmodule.directive(\"tgAdminNavigation\", AdminNavigationDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/project-profile.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntrim = @.taiga.trim\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Project Profile Controller\n#############################################################################\n\nclass ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @appMetaService, @translate) ->\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then =>\n sectionName = @translate.instant( @scope.sectionName)\n title = @translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName, projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"project:loaded\", =>\n sectionName = @translate.instant(@scope.sectionName)\n title = @translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName, projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.pointsList = _.sortBy(project.points, \"order\")\n @scope.usStatusList = _.sortBy(project.us_statuses, \"order\")\n @scope.taskStatusList = _.sortBy(project.task_statuses, \"order\")\n @scope.prioritiesList = _.sortBy(project.priorities, \"order\")\n @scope.severitiesList = _.sortBy(project.severities, \"order\")\n @scope.issueTypesList = _.sortBy(project.issue_types, \"order\")\n @scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\")\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise\n\n openDeleteLightbox: ->\n @rootscope.$broadcast(\"deletelightbox:new\", @scope.project)\n\nmodule.controller(\"ProjectProfileController\", ProjectProfileController)\n\n\n#############################################################################\n## Project Profile Directive\n#############################################################################\n\nProjectProfileDirective = ($repo, $confirm, $loading, $navurls, $location, projectService, currentUserService) ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.save($scope.project)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n newUrl = $navurls.resolve(\"project-admin-project-profile-details\", {\n project: $scope.project.slug\n })\n $location.path(newUrl)\n\n $ctrl.loadInitialData()\n\n projectService.fetchProject()\n currentUserService.loadProjects()\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgProjectProfile\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgNavUrls\", \"$tgLocation\",\n \"tgProjectService\", \"tgCurrentUserService\", ProjectProfileDirective])\n\n\n#############################################################################\n## Project Default Values Directive\n#############################################################################\n\nProjectDefaultValuesDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.save($scope.project)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgProjectDefaultValues\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\",\n ProjectDefaultValuesDirective])\n\n#############################################################################\n## Project Modules Directive\n#############################################################################\n\nProjectModulesDirective = ($repo, $confirm, $loading, projectService) ->\n link = ($scope, $el, $attrs) ->\n submit = =>\n form = $el.find(\"form\").checksley()\n return if not form.validate()\n\n target = angular.element(\".admin-functionalities .submit-button\")\n currentLoading = $loading()\n .target(target)\n .start()\n\n promise = $repo.save($scope.project)\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"project:loaded\", $scope.project)\n\n projectService.fetchProject()\n\n promise.then null, (data) ->\n currentLoading.finish()\n $confirm.notify(\"error\", data._error_message)\n\n $el.on \"submit\", \"form\", (event) ->\n event.preventDefault()\n submit()\n\n $el.on \"click\", \".admin-functionalities a.button-green\", (event) ->\n event.preventDefault()\n submit()\n\n $scope.$watch \"isVideoconferenceActivated\", (isVideoconferenceActivated) ->\n if isVideoconferenceActivated\n $el.find(\".videoconference-attributes\").removeClass(\"hidden\")\n else\n $el.find(\".videoconference-attributes\").addClass(\"hidden\")\n $scope.project.videoconferences = null\n $scope.project.videoconferences_extra_data = \"\"\n\n $scope.$watch \"project\", (project) ->\n if project.videoconferences?\n $scope.isVideoconferenceActivated = true\n else\n $scope.isVideoconferenceActivated = false\n\n return {link:link}\n\nmodule.directive(\"tgProjectModules\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"tgProjectService\",\n ProjectModulesDirective])\n\n\n#############################################################################\n## Project Export Directive\n#############################################################################\n\nProjectExportDirective = ($window, $rs, $confirm, $translate) ->\n link = ($scope, $el, $attrs) ->\n buttonsEl = $el.find(\".admin-project-export-buttons\")\n showButtons = -> buttonsEl.removeClass(\"hidden\")\n hideButtons = -> buttonsEl.addClass(\"hidden\")\n\n resultEl = $el.find(\".admin-project-export-result\")\n showResult = -> resultEl.removeClass(\"hidden\")\n hideResult = -> resultEl.addClass(\"hidden\")\n\n spinnerEl = $el.find(\".spin\")\n showSpinner = -> spinnerEl.removeClass(\"hidden\")\n hideSpinner = -> spinnerEl.addClass(\"hidden\")\n\n resultTitleEl = $el.find(\".result-title\")\n\n\n loading_title = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_TITLE\")\n loading_msg = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_MESSAGE\")\n dump_ready_text = -> resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.DUMP_READY\"))\n asyn_message = -> resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE\"))\n syn_message = (url) -> resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.SYNC_MESSAGE\", {\n url: url}))\n\n setLoadingTitle = -> resultTitleEl.html(loading_title)\n setAsyncTitle = -> resultTitleEl.html(loading_msg)\n setSyncTitle = -> resultTitleEl.html(dump_ready_text)\n\n resultMessageEl = $el.find(\".result-message \")\n setLoadingMessage = -> resultMessageEl.html(loading_msg)\n setAsyncMessage = -> resultMessageEl.html(asyn_message)\n setSyncMessage = (url) -> resultMessageEl.html(syn_message(url))\n\n showLoadingMode = ->\n showSpinner()\n setLoadingTitle()\n setLoadingMessage()\n hideButtons()\n showResult()\n\n showExportResultAsyncMode = ->\n hideSpinner()\n setAsyncTitle()\n setAsyncMessage()\n\n showExportResultSyncMode = (url) ->\n hideSpinner()\n setSyncTitle()\n setSyncMessage(url)\n\n showErrorMode = ->\n hideSpinner()\n hideResult()\n showButtons()\n\n $el.on \"click\", \"a.button-export\", debounce 2000, (event) =>\n event.preventDefault()\n\n onSuccess = (result) =>\n if result.status == 202 # Async mode\n showExportResultAsyncMode()\n else #result.status == 200 # Sync mode\n dumpUrl = result.data.url\n showExportResultSyncMode(dumpUrl)\n $window.open(dumpUrl, \"_blank\")\n\n onError = (result) =>\n showErrorMode()\n\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR\")\n\n if result.status == 429 # TOO MANY REQUESTS\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\")\n else if result.data?._error_message\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\", {\n message: result.data._error_message})\n\n $confirm.notify(\"error\", errorMsg)\n\n showLoadingMode()\n $rs.projects.export($scope.projectId).then(onSuccess, onError)\n\n return {link:link}\n\nmodule.directive(\"tgProjectExport\", [\"$window\", \"$tgResources\", \"$tgConfirm\", \"$translate\",\n ProjectExportDirective])\n\n\n#############################################################################\n## CSV Export Controllers\n#############################################################################\n\nclass CsvExporterController extends taiga.Controller\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgUrls\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @urls, @confirm, @rs, @translate) ->\n @rootscope.$on(\"project:loaded\", @.setCsvUuid)\n @scope.$watch \"csvUuid\", (value) =>\n if value\n @scope.csvUrl = @urls.resolveAbsolute(\"#{@.type}-csv\", value)\n else\n @scope.csvUrl = \"\"\n\n setCsvUuid: =>\n @scope.csvUuid = @scope.project[\"#{@.type}_csv_uuid\"]\n\n _generateUuid: (response=null) =>\n promise = @rs.projects[\"regenerate_#{@.type}_csv_uuid\"](@scope.projectId)\n\n promise.then (data) =>\n @scope.csvUuid = data.data?.uuid\n\n promise.then null, =>\n @confirm.notify(\"error\")\n\n promise.finally ->\n response.finish() if response\n return promise\n\n regenerateUuid: ->\n if @scope.csvUuid\n title = @translate.instant(\"ADMIN.REPORTS.REGENERATE_TITLE\")\n subtitle = @translate.instant(\"ADMIN.REPORTS.REGENERATE_SUBTITLE\")\n\n @confirm.ask(title, subtitle).then @._generateUuid\n else\n @._generateUuid()\n\n\nclass CsvExporterUserstoriesController extends CsvExporterController\n type: \"userstories\"\n\n\nclass CsvExporterTasksController extends CsvExporterController\n type: \"tasks\"\n\n\nclass CsvExporterIssuesController extends CsvExporterController\n type: \"issues\"\n\n\nmodule.controller(\"CsvExporterUserstoriesController\", CsvExporterUserstoriesController)\nmodule.controller(\"CsvExporterTasksController\", CsvExporterTasksController)\nmodule.controller(\"CsvExporterIssuesController\", CsvExporterIssuesController)\n\n\n#############################################################################\n## CSV Directive\n#############################################################################\n\nCsvUsDirective = ($translate) ->\n link = ($scope) ->\n $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_US\"\n\n return {\n controller: \"CsvExporterUserstoriesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n }\n\nmodule.directive(\"tgCsvUs\", [\"$translate\", CsvUsDirective])\n\n\nCsvTaskDirective = ($translate) ->\n link = ($scope) ->\n $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_TASK\"\n\n return {\n controller: \"CsvExporterTasksController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n }\n\nmodule.directive(\"tgCsvTask\", [\"$translate\", CsvTaskDirective])\n\n\nCsvIssueDirective = ($translate) ->\n link = ($scope) ->\n $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_ISSUE\"\n\n return {\n controller: \"CsvExporterIssuesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n }\n\nmodule.directive(\"tgCsvIssue\", [\"$translate\", CsvIssueDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/project-profile.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ntrim = @.taiga.trim\ntoString = @.taiga.toString\njoinStr = @.taiga.joinStr\ngroupBy = @.taiga.groupBy\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaAdmin\")\n\n#############################################################################\n## Project values section Controller\n#############################################################################\n\nclass ProjectValuesSectionController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @appMetaService, @translate) ->\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then () =>\n sectionName = @translate.instant(@scope.sectionName)\n\n title = @translate.instant(\"ADMIN.PROJECT_VALUES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": @scope.project.name\n })\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n return promise\n\n\nmodule.controller(\"ProjectValuesSectionController\", ProjectValuesSectionController)\n\n#############################################################################\n## Project values Controller\n#############################################################################\n\nclass ProjectValuesController extends taiga.Controller\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs) ->\n @scope.$on(\"admin:project-values:move\", @.moveValue)\n @rootscope.$on(\"project:loaded\", @.loadValues)\n\n loadValues: =>\n return @rs[@scope.resource].listValues(@scope.projectId, @scope.type).then (values) =>\n @scope.values = values\n @scope.maxValueOrder = _.max(values, \"order\").order\n return values\n\n moveValue: (ctx, itemValue, itemIndex) =>\n values = @scope.values\n r = values.indexOf(itemValue)\n values.splice(r, 1)\n values.splice(itemIndex, 0, itemValue)\n _.each values, (value, index) ->\n value.order = index\n\n @repo.saveAll(values)\n\nmodule.controller(\"ProjectValuesController\", ProjectValuesController)\n\n\n#############################################################################\n## Project values directive\n#############################################################################\n\nProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope) ->\n ## Drag & Drop Link\n\n linkDragAndDrop = ($scope, $el, $attrs) ->\n oldParentScope = null\n newParentScope = null\n itemEl = null\n tdom = $el.find(\".sortable\")\n\n tdom.sortable({\n handle: \".row.table-main.visualization\",\n dropOnEmpty: true\n connectWith: \".project-values-body\"\n revert: 400\n axis: \"y\"\n })\n\n tdom.on \"sortstop\", (event, ui) ->\n itemEl = ui.item\n itemValue = itemEl.scope().value\n itemIndex = itemEl.index()\n $scope.$broadcast(\"admin:project-values:move\", itemValue, itemIndex)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n ## Value Link\n\n linkValue = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n valueType = $attrs.type\n objName = $attrs.objname\n\n initializeNewValue = ->\n $scope.newValue = {\n \"name\": \"\"\n \"is_closed\": false\n \"is_archived\": false\n }\n\n initializeTextTranslations = ->\n $scope.addNewElementText = $translate.instant(\"ADMIN.PROJECT_VALUES_#{objName.toUpperCase()}.ACTION_ADD\")\n\n initializeNewValue()\n initializeTextTranslations()\n\n $rootscope.$on \"$translateChangeEnd\", ->\n $scope.$evalAsync(initializeTextTranslations)\n\n goToBottomList = (focus = false) =>\n table = $el.find(\".table-main\")\n\n $(document.body).scrollTop(table.offset().top + table.height())\n\n if focus\n $el.find(\".new-value input:visible\").first().focus()\n\n saveValue = (target) ->\n formEl = target.parents(\"form\")\n form = formEl.checksley()\n return if not form.validate()\n\n value = formEl.scope().value\n promise = $repo.save(value)\n promise.then =>\n row = target.parents(\".row.table-main\")\n row.addClass(\"hidden\")\n row.siblings(\".visualization\").removeClass('hidden')\n\n promise.then null, (data) ->\n form.setErrors(data)\n\n saveNewValue = (target) ->\n formEl = target.parents(\"form\")\n form = formEl.checksley()\n return if not form.validate()\n\n $scope.newValue.project = $scope.project.id\n\n $scope.newValue.order = if $scope.maxValueOrder then $scope.maxValueOrder + 1 else 1\n\n promise = $repo.create(valueType, $scope.newValue)\n promise.then (data) =>\n target.addClass(\"hidden\")\n\n $scope.values.push(data)\n $scope.maxValueOrder = data.order\n initializeNewValue()\n\n promise.then null, (data) ->\n form.setErrors(data)\n\n cancel = (target) ->\n row = target.parents(\".row.table-main\")\n formEl = target.parents(\"form\")\n value = formEl.scope().value\n $scope.$apply ->\n row.addClass(\"hidden\")\n value.revert()\n row.siblings(\".visualization\").removeClass('hidden')\n\n $el.on \"click\", \".show-add-new\", (event) ->\n event.preventDefault()\n $el.find(\".new-value\").removeClass('hidden')\n\n goToBottomList(true)\n\n $el.on \"click\", \".add-new\", debounce 2000, (event) ->\n event.preventDefault()\n target = $el.find(\".new-value\")\n saveNewValue(target)\n\n $el.on \"click\", \".delete-new\", (event) ->\n event.preventDefault()\n $el.find(\".new-value\").addClass(\"hidden\")\n initializeNewValue()\n\n $el.on \"click\", \".edit-value\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n\n row = target.parents(\".row.table-main\")\n row.addClass(\"hidden\")\n\n editionRow = row.siblings(\".edition\")\n editionRow.removeClass('hidden')\n editionRow.find('input:visible').first().focus().select()\n\n $el.on \"keyup\", \".edition input\", (event) ->\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n saveValue(target)\n else if event.keyCode == 27\n target = angular.element(event.currentTarget)\n cancel(target)\n\n $el.on \"keyup\", \".new-value input\", (event) ->\n if event.keyCode == 13\n target = $el.find(\".new-value\")\n saveNewValue(target)\n else if event.keyCode == 27\n $el.find(\".new-value\").addClass(\"hidden\")\n initializeNewValue()\n\n $el.on \"click\", \".save\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n saveValue(target)\n\n $el.on \"click\", \".cancel\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n cancel(target)\n\n $el.on \"click\", \".delete-value\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.parents(\"form\")\n value = formEl.scope().value\n\n choices = {}\n _.each $scope.values, (option) ->\n if value.id != option.id\n choices[option.id] = option.name\n\n subtitle = value.name\n\n if _.keys(choices).length == 0\n return $confirm.error($translate.instant(\"ADMIN.PROJECT_VALUES.ERROR_DELETE_ALL\"))\n\n title = $translate.instant(\"ADMIN.COMMON.TITLE_ACTION_DELETE_VALUE\")\n text = $translate.instant(\"ADMIN.PROJECT_VALUES.REPLACEMENT\")\n\n $confirm.askChoice(title, subtitle, choices, text).then (response) ->\n onSucces = ->\n $ctrl.loadValues().finally ->\n response.finish()\n onError = ->\n $confirm.notify(\"error\")\n $repo.remove(value, {\"moveTo\": response.selected}).then(onSucces, onError)\n\n link = ($scope, $el, $attrs) ->\n linkDragAndDrop($scope, $el, $attrs)\n linkValue($scope, $el, $attrs)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgProjectValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", ProjectValuesDirective])\n\n\n#############################################################################\n## Color selection directive\n#############################################################################\n\nColorSelectionDirective = () ->\n ## Color selection Link\n\n link = ($scope, $el, $attrs, $model) ->\n $ctrl = $el.controller()\n\n $scope.$watch $attrs.ngModel, (element) ->\n $scope.color = element.color\n\n $el.on \"click\", \".current-color\", (event) ->\n # Showing the color selector\n event.preventDefault()\n event.stopPropagation()\n target = angular.element(event.currentTarget)\n $el.find(\".select-color\").hide()\n target.siblings(\".select-color\").show()\n # Hide when click outside\n body = angular.element(\"body\")\n body.on \"click\", (event) =>\n if angular.element(event.target).parent(\".select-color\").length == 0\n $el.find(\".select-color\").hide()\n body.unbind(\"click\")\n\n $el.on \"click\", \".select-color .color\", (event) ->\n # Selecting one color on color selector\n event.preventDefault()\n target = angular.element(event.currentTarget)\n $scope.$apply ->\n $model.$modelValue.color = target.data(\"color\")\n $el.find(\".select-color\").hide()\n\n $el.on \"click\", \".select-color .selected-color\", (event) ->\n event.preventDefault()\n $scope.$apply ->\n $model.$modelValue.color = $scope.color\n $el.find(\".select-color\").hide()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link: link\n require:\"ngModel\"\n }\n\nmodule.directive(\"tgColorSelection\", ColorSelectionDirective)\n\n\n#############################################################################\n## Custom Attributes Controller\n#############################################################################\n\n# Custom attributes types (see taiga-back/taiga/projects/custom_attributes/choices.py)\nTEXT_TYPE = \"text\"\nMULTILINE_TYPE = \"multiline\"\nDATE_TYPE = \"date\"\n\n\nTYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n },\n {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n },\n {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }\n]\n\nclass ProjectCustomAttributesController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appMetaService,\n @translate) ->\n @scope.TYPE_CHOICES = TYPE_CHOICES\n\n @scope.project = {}\n\n @rootscope.$on \"project:loaded\", =>\n @.loadCustomAttributes()\n\n sectionName = @translate.instant(@scope.sectionName)\n title = @translate.instant(\"ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": @scope.project.name\n })\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n #########################\n # Custom Attribute\n #########################\n\n loadCustomAttributes: =>\n return @rs.customAttributes[@scope.type].list(@scope.projectId).then (customAttributes) =>\n @scope.customAttributes = customAttributes\n @scope.maxOrder = _.max(customAttributes, \"order\").order\n return customAttributes\n\n createCustomAttribute: (attrValues) =>\n return @repo.create(\"custom-attributes/#{@scope.type}\", attrValues)\n\n saveCustomAttribute: (attrModel) =>\n return @repo.save(attrModel)\n\n deleteCustomAttribute: (attrModel) =>\n return @repo.remove(attrModel)\n\n moveCustomAttributes: (attrModel, newIndex) =>\n customAttributes = @scope.customAttributes\n r = customAttributes.indexOf(attrModel)\n customAttributes.splice(r, 1)\n customAttributes.splice(newIndex, 0, attrModel)\n\n _.each customAttributes, (val, idx) ->\n val.order = idx\n\n @repo.saveAll(customAttributes)\n\n\nmodule.controller(\"ProjectCustomAttributesController\", ProjectCustomAttributesController)\n\n\n#############################################################################\n## Custom Attributes Directive\n#############################################################################\n\nProjectCustomAttributesDirective = ($log, $confirm, animationFrame, $translate) ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n ##################################\n # Drag & Drop\n ##################################\n sortableEl = $el.find(\".js-sortable\")\n\n sortableEl.sortable({\n handle: \".js-view-custom-field\",\n dropOnEmpty: true\n revert: 400\n axis: \"y\"\n })\n\n sortableEl.on \"sortstop\", (event, ui) ->\n itemEl = ui.item\n itemAttr = itemEl.scope().attr\n itemIndex = itemEl.index()\n $ctrl.moveCustomAttributes(itemAttr, itemIndex)\n\n ##################################\n # New custom attribute\n ##################################\n\n showCreateForm = ->\n $el.find(\".js-new-custom-field\").removeClass(\"hidden\")\n $el.find(\".js-new-custom-field input:visible\").first().focus()\n\n hideCreateForm = ->\n $el.find(\".js-new-custom-field\").addClass(\"hidden\")\n\n showAddButton = ->\n $el.find(\".js-add-custom-field-button\").removeClass(\"hidden\")\n\n hideAddButton = ->\n $el.find(\".js-add-custom-field-button\").addClass(\"hidden\")\n\n showCancelButton = ->\n $el.find(\".js-cancel-new-custom-field-button\").removeClass(\"hidden\")\n\n hideCancelButton = ->\n $el.find(\".js-cancel-new-custom-field-button\").addClass(\"hidden\")\n\n resetNewAttr = ->\n $scope.newAttr = {}\n\n create = (formEl) ->\n form = formEl.checksley()\n return if not form.validate()\n\n onSucces = =>\n $ctrl.loadCustomAttributes()\n hideCreateForm()\n resetNewAttr()\n $confirm.notify(\"success\")\n\n onError = (data) =>\n form.setErrors(data)\n\n attr = $scope.newAttr\n attr.project = $scope.projectId\n attr.order = if $scope.maxOrder then $scope.maxOrder + 1 else 1\n\n $ctrl.createCustomAttribute(attr).then(onSucces, onError)\n\n cancelCreate = ->\n hideCreateForm()\n resetNewAttr()\n\n $scope.$watch \"customAttributes\", (customAttributes) ->\n return if not customAttributes\n\n if customAttributes.length == 0\n hideCancelButton()\n hideAddButton()\n showCreateForm()\n else\n hideCreateForm()\n showAddButton()\n showCancelButton()\n\n $el.on \"click\", \".js-add-custom-field-button\", (event) ->\n event.preventDefault()\n\n showCreateForm()\n\n $el.on \"click\", \".js-create-custom-field-button\", debounce 2000, (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n create(formEl)\n\n $el.on \"click\", \".js-cancel-new-custom-field-button\", (event) ->\n event.preventDefault()\n\n cancelCreate()\n\n $el.on \"keyup\", \".js-new-custom-field input\", (event) ->\n if event.keyCode == 13 # Enter\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n create(formEl)\n else if event.keyCode == 27 # Esc\n cancelCreate()\n\n ##################################\n # Edit custom attribute\n ##################################\n\n showEditForm = (formEl) ->\n formEl.find(\".js-view-custom-field\").addClass(\"hidden\")\n formEl.find(\".js-edit-custom-field\").removeClass(\"hidden\")\n formEl.find(\".js-edit-custom-field input:visible\").first().focus().select()\n\n hideEditForm = (formEl) ->\n formEl.find(\".js-edit-custom-field\").addClass(\"hidden\")\n formEl.find(\".js-view-custom-field\").removeClass(\"hidden\")\n\n revertChangesInCustomAttribute = (formEl) ->\n $scope.$apply ->\n formEl.scope().attr.revert()\n\n update = (formEl) ->\n form = formEl.checksley()\n return if not form.validate()\n\n onSucces = =>\n $ctrl.loadCustomAttributes()\n hideEditForm(formEl)\n $confirm.notify(\"success\")\n\n onError = (data) =>\n form.setErrors(data)\n\n attr = formEl.scope().attr\n $ctrl.saveCustomAttribute(attr).then(onSucces, onError)\n\n cancelUpdate = (formEl) ->\n hideEditForm(formEl)\n revertChangesInCustomAttribute(formEl)\n\n $el.on \"click\", \".js-edit-custom-field-button\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n showEditForm(formEl)\n\n $el.on \"click\", \".js-update-custom-field-button\", debounce 2000, (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n update(formEl)\n\n $el.on \"click\", \".js-cancel-edit-custom-field-button\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n cancelUpdate(formEl)\n\n $el.on \"keyup\", \".js-edit-custom-field input\", (event) ->\n if event.keyCode == 13 # Enter\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n update(formEl)\n else if event.keyCode == 27 # Esc\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n cancelUpdate(formEl)\n\n ##################################\n # Delete custom attribute\n ##################################\n\n deleteCustomAttribute = (formEl) ->\n attr = formEl.scope().attr\n message = attr.name\n\n title = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.DELETE\")\n text = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.CONFIRM_DELETE\")\n\n $confirm.ask(title, text, message).then (response) ->\n onSucces = ->\n $ctrl.loadCustomAttributes().finally -> response.finish()\n\n onError = ->\n $confirm.notify(\"error\", null, \"We have not been able to delete '#{message}'.\")\n\n $ctrl.deleteCustomAttribute(attr).then(onSucces, onError)\n\n $el.on \"click\", \".js-delete-custom-field-button\", debounce 2000, (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n formEl = target.closest(\"form\")\n\n deleteCustomAttribute(formEl)\n\n return {link: link}\n\nmodule.directive(\"tgProjectCustomAttributes\", [\"$log\", \"$tgConfirm\", \"animationFrame\", \"$translate\",\n ProjectCustomAttributesDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/memberships.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\nbindMethods = @.taiga.bindMethods\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Project Roles Controller\n#############################################################################\n\nclass RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = \"ADMIN.MENU.PERMISSIONS\"\n @scope.project = {}\n @scope.anyComputableRole = true\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.ROLES.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n\n @scope.$emit('project:loaded', project)\n @scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable))\n\n return project\n\n loadRoles: ->\n return @rs.roles.list(@scope.projectId).then (roles) =>\n roles = roles.map (role) ->\n role.external_user = false\n\n return role\n\n public_permission = {\n \"name\": @translate.instant(\"ADMIN.ROLES.EXTERNAL_USER\"),\n \"permissions\": @scope.project.public_permissions,\n \"external_user\": true\n }\n\n roles.push(public_permission)\n\n @scope.roles = roles\n @scope.role = @scope.roles[0]\n return roles\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadRoles())\n return promise\n\n setRole: (role) ->\n @scope.role = role\n @scope.$broadcast(\"role:changed\", @scope.role)\n\n delete: ->\n choices = {}\n for role in @scope.roles\n if role.id != @scope.role.id\n choices[role.id] = role.name\n\n if _.keys(choices).length == 0\n return @confirm.error(@translate.instant(\"ADMIN.ROLES.ERROR_DELETE_ALL\"))\n\n title = @translate.instant(\"ADMIN.ROLES.TITLE_DELETE_ROLE\")\n subtitle = @scope.role.name\n replacement = @translate.instant(\"ADMIN.ROLES.REPLACEMENT_ROLE\")\n warning = @translate.instant(\"ADMIN.ROLES.WARNING_DELETE_ROLE\")\n return @confirm.askChoice(title, subtitle, choices, replacement, warning).then (response) =>\n onSuccess = =>\n @.loadProject()\n @.loadRoles().finally =>\n response.finish()\n onError = =>\n @confirm.notify('error')\n\n return @repo.remove(@scope.role, {moveTo: response.selected}).then onSuccess, onError\n\n _enableComputable: =>\n onSuccess = =>\n @confirm.notify(\"success\")\n @.loadProject()\n\n onError = =>\n @confirm.notify(\"error\")\n @scope.role.revert()\n\n @repo.save(@scope.role).then onSuccess, onError\n\n _disableComputable: =>\n askOnSuccess = (response) =>\n onSuccess = =>\n response.finish()\n @confirm.notify(\"success\")\n @.loadProject()\n onError = =>\n response.finish()\n @confirm.notify(\"error\")\n @scope.role.revert()\n @repo.save(@scope.role).then onSuccess, onError\n\n askOnError = (response) =>\n @scope.role.revert()\n\n title = @translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_TITLE\")\n subtitle = @translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_SUBTITLE\", {\n roleName: @scope.role.name\n })\n message = @translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_MESSAGE\")\n return @confirm.ask(title, subtitle, message).then askOnSuccess, askOnError\n\n toggleComputable: debounce 2000, ->\n if not @scope.role.computable\n @._disableComputable()\n else\n @._enableComputable()\n\nmodule.controller(\"RolesController\", RolesController)\n\n\nEditRoleDirective = ($repo, $confirm) ->\n link = ($scope, $el, $attrs) ->\n toggleView = ->\n $el.find('.total').toggle()\n $el.find('.edit-role').toggle()\n\n submit = () ->\n $scope.role.name = $el.find(\"input\").val()\n\n promise = $repo.save($scope.role)\n\n promise.then ->\n $confirm.notify(\"success\")\n\n promise.then null, (data) ->\n $confirm.notify(\"error\")\n\n toggleView()\n\n $el.on \"click\", \"a.icon-edit\", ->\n toggleView()\n $el.find(\"input\").focus()\n $el.find(\"input\").val($scope.role.name)\n\n $el.on \"click\", \"a.save\", submit\n\n $el.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13 # Enter key\n submit()\n else if event.keyCode == 27 # ESC key\n toggleView()\n\n $scope.$on \"role:changed\", ->\n if $el.find('.edit-role').is(\":visible\")\n toggleView()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgEditRole\", [\"$tgRepo\", \"$tgConfirm\", EditRoleDirective])\n\nRolesDirective = ->\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgRoles\", RolesDirective)\n\nNewRoleDirective = ($tgrepo, $confirm) ->\n DEFAULT_PERMISSIONS = [\"view_project\", \"view_milestones\", \"view_us\", \"view_tasks\", \"view_issues\"]\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $el.on \"click\", \"a.add-button\", (event) ->\n event.preventDefault()\n $el.find(\".new\").removeClass(\"hidden\")\n $el.find(\".new\").focus()\n $el.find(\".add-button\").hide()\n\n $el.on \"keyup\", \".new\", (event) ->\n event.preventDefault()\n if event.keyCode == 13 # Enter key\n target = angular.element(event.currentTarget)\n newRole = {\n project: $scope.projectId\n name: target.val()\n permissions: DEFAULT_PERMISSIONS\n order: _.max($scope.roles, (r) -> r.order).order + 1\n computable: false\n }\n\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new\").val('')\n\n onSuccess = (role) ->\n insertPosition = $scope.roles.length - 1\n $scope.roles.splice(insertPosition, 0, role)\n $ctrl.setRole(role)\n $el.find(\".add-button\").show()\n $ctrl.loadProject()\n\n onError = ->\n $confirm.notify(\"error\")\n\n $tgrepo.create(\"roles\", newRole).then(onSuccess, onError)\n\n else if event.keyCode == 27 # ESC key\n target = angular.element(event.currentTarget)\n $el.find(\".new\").addClass(\"hidden\")\n $el.find(\".new\").val('')\n $el.find(\".add-button\").show()\n\n return {link:link}\n\nmodule.directive(\"tgNewRole\", [\"$tgRepo\", \"$tgConfirm\", NewRoleDirective])\n\n\n# Use category-config.scss styles\nRolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) ->\n resumeTemplate = _.template(\"\"\"\n
\">
\n
\n
<%- category.activePermissions %>/<%- category.permissions.length %>
\n <% _.each(category.permissions, function(permission) { %>\n
active<% } %>\"\n title=\"{{ '<%- permission.name %>' | translate }}\">
\n <% }) %>\n
\n
\n \"\"\")\n\n categoryTemplate = _.template(\"\"\"\n
\">\n
\n
\n
\n
\n <% _.each(category.permissions, function(permission) { %>\n
\">\n \">\n
\n disabled=\"disabled\" <% } %>\n <% if(permission.active) { %> checked=\"checked\" <% } %>/>\n
\n \n \n
\n
\n <% }) %>\n
\n
\n
\n \"\"\")\n\n baseTemplate = _.template(\"\"\"\n
\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n $ctrl = $el.controller()\n\n generateCategoriesFromRole = (role) ->\n setActivePermissions = (permissions) ->\n return _.map(permissions, (x) -> _.extend({}, x, {active: x[\"key\"] in role.permissions}))\n\n isPermissionEditable = (permission, role, project) ->\n if role.external_user &&\n !project.is_private &&\n permission.key.indexOf(\"view_\") == 0\n return false\n else\n return true\n\n setActivePermissionsPerCategory = (category) ->\n return _.map(category, (cat) ->\n cat.permissions = cat.permissions.map (permission) ->\n permission.editable = isPermissionEditable(permission, role, $scope.project)\n\n return permission\n\n _.extend({}, cat, {\n activePermissions: _.filter(cat[\"permissions\"], \"active\").length\n })\n )\n\n categories = []\n\n milestonePermissions = [\n { key: \"view_milestones\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS\"}\n { key: \"add_milestone\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS\"}\n { key: \"modify_milestone\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS\"}\n { key: \"delete_milestone\", name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME\",\n permissions: setActivePermissions(milestonePermissions)\n })\n\n userStoryPermissions = [\n { key: \"view_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES\"}\n { key: \"add_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES\"}\n { key: \"modify_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES\"}\n { key: \"delete_us\", name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME\",\n permissions: setActivePermissions(userStoryPermissions)\n })\n\n taskPermissions = [\n { key: \"view_tasks\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS\"}\n { key: \"add_task\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS\"}\n { key: \"modify_task\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS\"}\n { key: \"delete_task\", name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.NAME\" ,\n permissions: setActivePermissions(taskPermissions)\n })\n\n issuePermissions = [\n { key: \"view_issues\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES\"}\n { key: \"add_issue\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES\"}\n { key: \"modify_issue\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES\"}\n { key: \"delete_issue\", name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME\",\n permissions: setActivePermissions(issuePermissions)\n })\n\n wikiPermissions = [\n { key: \"view_wiki_pages\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES\"}\n { key: \"add_wiki_page\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES\"}\n { key: \"modify_wiki_page\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES\"}\n { key: \"delete_wiki_page\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES\"}\n { key: \"view_wiki_links\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS\"}\n { key: \"add_wiki_link\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS\"}\n { key: \"delete_wiki_link\", name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS\"}\n ]\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.NAME\",\n permissions: setActivePermissions(wikiPermissions)\n })\n\n return setActivePermissionsPerCategory(categories)\n\n renderResume = (element, category) ->\n element.find(\".resume\").html($compile(resumeTemplate({category: category}))($scope))\n\n renderCategory = (category, index) ->\n html = categoryTemplate({category: category, index: index})\n html = angular.element(html)\n renderResume(html, category)\n return $compile(html)($scope)\n\n renderPermissions = () ->\n $el.off()\n html = baseTemplate()\n _.each generateCategoriesFromRole($scope.role), (category, index) ->\n html = angular.element(html).append(renderCategory(category, index))\n\n $el.html(html)\n $el.on \"click\", \".resume\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n target.next().toggleClass(\"open\")\n\n $el.on \"change\", \".category-item input\", (event) ->\n getActivePermissions = ->\n activePermissions = _.filter($el.find(\".category-item input\"), (t) ->\n angular.element(t).is(\":checked\")\n )\n activePermissions = _.sortBy(_.map(activePermissions, (t) ->\n permission = angular.element(t).parents(\".category-item\").data(\"id\")\n ))\n\n if activePermissions.length\n activePermissions.push(\"view_project\")\n\n return activePermissions\n\n target = angular.element(event.currentTarget)\n\n $scope.role.permissions = getActivePermissions()\n\n onSuccess = () ->\n categories = generateCategoriesFromRole($scope.role)\n categoryId = target.parents(\".category-config\").data(\"id\")\n renderResume(target.parents(\".category-config\"), categories[categoryId])\n $rootscope.$broadcast(\"projects:reload\")\n $confirm.notify(\"success\")\n $ctrl.loadProject()\n\n onError = ->\n $confirm.notify(\"error\")\n target.prop \"checked\", !target.prop(\"checked\")\n $scope.role.permissions = getActivePermissions()\n\n if $scope.role.external_user\n $scope.project.public_permissions = $scope.role.permissions\n $scope.project.anon_permissions = $scope.role.permissions.filter (permission) ->\n return permission.indexOf(\"view_\") == 0\n\n $repo.save($scope.project).then onSuccess, onError\n else\n $repo.save($scope.role).then onSuccess, onError\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n $scope.$on \"role:changed\", ->\n renderPermissions()\n\n bindOnce($scope, $attrs.ngModel, renderPermissions)\n\n return {link:link}\n\nmodule.directive(\"tgRolePermissions\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\",\n RolePermissionsDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/admin/third-parties.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\nbindMethods = @.taiga.bindMethods\ndebounce = @.taiga.debounce\ntimeout = @.taiga.timeout\n\nmodule = angular.module(\"taigaAdmin\")\n\n\n#############################################################################\n## Webhooks\n#############################################################################\n\nclass WebhooksController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @location, @navUrls, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = \"ADMIN.WEBHOOKS.SECTION_NAME\"\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.WEBHOOKS.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"webhooks:reload\", @.loadWebhooks\n\n loadWebhooks: ->\n return @rs.webhooks.list(@scope.projectId).then (webhooks) =>\n @scope.webhooks = webhooks\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n if not project.i_am_owner\n @location.path(@navUrls.resolve(\"permission-denied\"))\n\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then =>\n @.loadWebhooks()\n\n return promise\n\nmodule.controller(\"WebhooksController\", WebhooksController)\n\n\n#############################################################################\n## Webhook Directive\n#############################################################################\n\nWebhookDirective = ($rs, $repo, $confirm, $loading, $translate) ->\n link = ($scope, $el, $attrs) ->\n webhook = $scope.$eval($attrs.tgWebhook)\n\n updateLogs = () ->\n prettyDate = $translate.instant(\"ADMIN.WEBHOOKS.DATE\")\n\n $rs.webhooklogs.list(webhook.id).then (webhooklogs) =>\n for log in webhooklogs\n log.validStatus = 200 <= log.status < 300\n log.prettySentHeaders = _.map(_.pairs(log.request_headers), ([header, value]) -> \"#{header}: #{value}\").join(\"\\n\")\n log.prettySentData = JSON.stringify(log.request_data)\n log.prettyDate = moment(log.created).format(prettyDate)\n\n webhook.logs_counter = webhooklogs.length\n webhook.logs = webhooklogs\n updateShowHideHistoryText()\n\n updateShowHideHistoryText = () ->\n textElement = $el.find(\".toggle-history\")\n historyElement = textElement.parents(\".single-webhook-wrapper\").find(\".webhooks-history\")\n\n if historyElement.hasClass(\"open\")\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY\")\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY_TITLE\")\n else\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY\")\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY_TITLE\")\n\n textElement.text(text)\n textElement.prop(\"title\", title)\n\n showVisualizationMode = () ->\n $el.find(\".edition-mode\").addClass(\"hidden\")\n $el.find(\".visualization-mode\").removeClass(\"hidden\")\n\n showEditMode = () ->\n $el.find(\".visualization-mode\").addClass(\"hidden\")\n $el.find(\".edition-mode\").removeClass(\"hidden\")\n\n openHistory = () ->\n $el.find(\".webhooks-history\").addClass(\"open\")\n\n cancel = () ->\n showVisualizationMode()\n $scope.$apply ->\n webhook.revert()\n\n save = debounce 2000, (target) ->\n form = target.parents(\"form\").checksley()\n return if not form.validate()\n promise = $repo.save(webhook)\n promise.then =>\n showVisualizationMode()\n\n promise.then null, (data) ->\n $confirm.notify(\"error\")\n form.setErrors(data)\n\n $el.on \"click\", \".test-webhook\", () ->\n openHistory()\n $rs.webhooks.test(webhook.id).then =>\n updateLogs()\n\n $el.on \"click\", \".edit-webhook\", () ->\n showEditMode()\n\n $el.on \"click\", \".cancel-existing\", () ->\n cancel()\n\n $el.on \"click\", \".edit-existing\", (event) ->\n event.preventDefault()\n target = angular.element(event.currentTarget)\n save(target)\n\n $el.on \"keyup\", \".edition-mode input\", (event) ->\n if event.keyCode == 13\n target = angular.element(event.currentTarget)\n save(target)\n else if event.keyCode == 27\n target = angular.element(event.currentTarget)\n cancel(target)\n\n $el.on \"click\", \".delete-webhook\", () ->\n title = $translate.instant(\"ADMIN.WEBHOOKS.DELETE\")\n message = $translate.instant(\"ADMIN.WEBHOOKS.WEBHOOK_NAME\", {name: webhook.name})\n\n $confirm.askOnDelete(title, message).then (askResponse) =>\n onSucces = ->\n askResponse.finish()\n $scope.$emit(\"webhooks:reload\")\n\n onError = ->\n askResponse.finish(false)\n $confirm.notify(\"error\")\n\n $repo.remove(webhook).then(onSucces, onError)\n\n $el.on \"click\", \".toggle-history\", (event) ->\n target = angular.element(event.currentTarget)\n if not webhook.logs? or webhook.logs.length == 0\n updateLogs().then ->\n #Waiting for ng-repeat to finish\n timeout 0, ->\n $el.find(\".webhooks-history\").toggleClass(\"open\")\n updateShowHideHistoryText()\n\n else\n $el.find(\".webhooks-history\").toggleClass(\"open\")\n $scope.$apply () ->\n updateShowHideHistoryText()\n\n\n $el.on \"click\", \".history-single\", (event) ->\n target = angular.element(event.currentTarget)\n target.toggleClass(\"history-single-open\")\n target.siblings(\".history-single-response\").toggleClass(\"open\")\n\n $el.on \"click\", \".resend-request\", (event) ->\n target = angular.element(event.currentTarget)\n log = target.data(\"log\")\n $rs.webhooklogs.resend(log).then () =>\n updateLogs()\n\n return {link:link}\n\nmodule.directive(\"tgWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$translate\",\n WebhookDirective])\n\n\n#############################################################################\n## New webhook Directive\n#############################################################################\n\nNewWebhookDirective = ($rs, $repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n webhook = $scope.$eval($attrs.tgWebhook)\n formDOMNode = $el.find(\".new-webhook-form\")\n addWebhookDOMNode = $el.find(\".add-webhook\")\n initializeNewValue = ->\n $scope.newValue = {\n \"name\": \"\"\n \"url\": \"\"\n \"key\": \"\"\n }\n\n initializeNewValue()\n\n $scope.$watch \"webhooks\", (webhooks) ->\n if webhooks?\n if webhooks.length == 0\n formDOMNode.removeClass(\"hidden\")\n addWebhookDOMNode.addClass(\"hidden\")\n formDOMNode.find(\"input\")[0].focus()\n else\n formDOMNode.addClass(\"hidden\")\n addWebhookDOMNode.removeClass(\"hidden\")\n\n save = debounce 2000, () ->\n form = formDOMNode.checksley()\n return if not form.validate()\n\n $scope.newValue.project = $scope.project.id\n promise = $repo.create(\"webhooks\", $scope.newValue)\n promise.then =>\n $scope.$emit(\"webhooks:reload\")\n initializeNewValue()\n\n promise.then null, (data) ->\n $confirm.notify(\"error\")\n form.setErrors(data)\n\n formDOMNode.on \"click\", \".add-new\", (event) ->\n event.preventDefault()\n save()\n\n formDOMNode.on \"keyup\", \"input\", (event) ->\n if event.keyCode == 13\n save()\n\n formDOMNode.on \"click\", \".cancel-new\", (event) ->\n $scope.$apply ->\n initializeNewValue()\n\n addWebhookDOMNode.on \"click\", (event) ->\n formDOMNode.removeClass(\"hidden\")\n formDOMNode.find(\"input\")[0].focus()\n\n return {link:link}\n\nmodule.directive(\"tgNewWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", NewWebhookDirective])\n\n\n#############################################################################\n## Github Controller\n#############################################################################\n\nclass GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"ADMIN.GITHUB.SECTION_NAME\")\n @scope.project = {}\n\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.GITHUB.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadModules: ->\n return @rs.modules.list(@scope.projectId, \"github\").then (github) =>\n @scope.github = github\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadModules())\n return promise\n\nmodule.controller(\"GithubController\", GithubController)\n\n\n#############################################################################\n## Gitlab Controller\n#############################################################################\n\nclass GitlabController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"ADMIN.GITLAB.SECTION_NAME\")\n @scope.project = {}\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.GITLAB.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"project:modules:reload\", =>\n @.loadModules()\n\n loadModules: ->\n return @rs.modules.list(@scope.projectId, \"gitlab\").then (gitlab) =>\n @scope.gitlab = gitlab\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadModules())\n return promise\n\nmodule.controller(\"GitlabController\", GitlabController)\n\n\n#############################################################################\n## Bitbucket Controller\n#############################################################################\n\nclass BitbucketController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"$scope\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$translate\"\n ]\n\n constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) ->\n bindMethods(@)\n\n @scope.sectionName = @translate.instant(\"ADMIN.BITBUCKET.SECTION_NAME\")\n @scope.project = {}\n promise = @.loadInitialData()\n\n promise.then () =>\n title = @translate.instant(\"ADMIN.BITBUCKET.PAGE_TITLE\", {projectName: @scope.project.name})\n description = @scope.project.description\n @appMetaService.setAll(title, description)\n\n promise.then null, @.onInitialDataError.bind(@)\n\n @scope.$on \"project:modules:reload\", =>\n @.loadModules()\n\n loadModules: ->\n return @rs.modules.list(@scope.projectId, \"bitbucket\").then (bitbucket) =>\n @scope.bitbucket = bitbucket\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n return project\n\n loadInitialData: ->\n promise = @.loadProject()\n promise.then(=> @.loadModules())\n return promise\n\nmodule.controller(\"BitbucketController\", BitbucketController)\n\n\nSelectInputText = ->\n link = ($scope, $el, $attrs) ->\n $el.on \"click\", \".select-input-content\", () ->\n $el.find(\"input\").select()\n $el.find(\".help-copy\").addClass(\"visible\")\n\n return {link:link}\n\nmodule.directive(\"tgSelectInputText\", SelectInputText)\n\n\n#############################################################################\n## GithubWebhooks Directive\n#############################################################################\n\nGithubWebhooksDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.saveAttribute($scope.github, \"github\")\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgGithubWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", GithubWebhooksDirective])\n\n\n#############################################################################\n## GitlabWebhooks Directive\n#############################################################################\n\nGitlabWebhooksDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.saveAttribute($scope.gitlab, \"gitlab\")\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"project:modules:reload\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgGitlabWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", GitlabWebhooksDirective])\n\n\n#############################################################################\n## BitbucketWebhooks Directive\n#############################################################################\n\nBitbucketWebhooksDirective = ($repo, $confirm, $loading) ->\n link = ($scope, $el, $attrs) ->\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n return if not form.validate()\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.saveAttribute($scope.bitbucket, \"bitbucket\")\n promise.then ->\n currentLoading.finish()\n $confirm.notify(\"success\")\n $scope.$emit(\"project:modules:reload\")\n\n promise.then null, (data) ->\n currentLoading.finish()\n form.setErrors(data)\n if data._error_message\n $confirm.notify(\"error\", data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n return {link:link}\n\nmodule.directive(\"tgBitbucketWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", BitbucketWebhooksDirective])\n\n\n#############################################################################\n## Valid Origin IP's Directive\n#############################################################################\nValidOriginIpsDirective = ->\n link = ($scope, $el, $attrs, $ngModel) ->\n $ngModel.$parsers.push (value) ->\n value = $.trim(value)\n if value == \"\"\n return []\n\n return value.split(\",\")\n\n return {\n link: link\n restrict: \"EA\"\n require: \"ngModel\"\n }\n\nmodule.directive(\"tgValidOriginIps\", ValidOriginIpsDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/common/attachments.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ntimeout = @.taiga.timeout\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaProject\")\n\nCreateProject = ($rootscope, $repo, $confirm, $location, $navurls, $rs, $projectUrl, $loading, lightboxService, $cacheFactory, $translate, currentUserService) ->\n link = ($scope, $el, attrs) ->\n $scope.data = {}\n $scope.templates = []\n currentLoading = null\n\n form = $el.find(\"form\").checksley({\"onlyOneErrorElement\": true})\n\n onSuccessSubmit = (response) ->\n # remove all $http cache\n # This is necessary when a project is created with the same name\n # than another deleted in the same session\n $cacheFactory.get('$http').removeAll()\n\n currentLoading.finish()\n $rootscope.$broadcast(\"projects:reload\")\n\n $confirm.notify(\"success\", $translate.instant(\"COMMON.SAVE\"))\n\n $location.url($projectUrl.get(response))\n lightboxService.close($el)\n currentUserService.loadProjects()\n\n onErrorSubmit = (response) ->\n currentLoading.finish()\n form.setErrors(response)\n selectors = []\n for error_field in _.keys(response)\n selectors.push(\"[name=#{error_field}]\")\n $el.find(\".active\").removeClass(\"active\")\n error_step = $el.find(selectors.join(\",\")).first().parents(\".wizard-step\")\n error_step.addClass(\"active\")\n $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(error_step.data(\"step\"))\n\n submit = (event) =>\n event.preventDefault()\n\n if not form.validate()\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $repo.create(\"projects\", $scope.data)\n promise.then(onSuccessSubmit, onErrorSubmit)\n\n openLightbox = ->\n $scope.data = {}\n\n if !$scope.templates.length\n $rs.projects.templates().then (result) =>\n $scope.templates = result\n $scope.data.creation_template = _.head(_.filter($scope.templates, (x) -> x.slug == \"scrum\")).id\n else\n $scope.data.creation_template = _.head(_.filter($scope.templates, (x) -> x.slug == \"scrum\")).id\n\n $el.find(\".active\").removeClass(\"active\")\n $el.find(\".create-step1\").addClass(\"active\")\n\n lightboxService.open($el)\n timeout 600, ->\n $el.find(\".progress-bar\").addClass('step1')\n\n $el.on \"click\", \".button-next\", (event) ->\n event.preventDefault()\n\n current = $el.find(\".active\")\n\n valid = true\n for field in form.fields\n if current.find(\"[name=#{field.element.attr('name')}]\").length\n valid = field.validate() != false and valid\n\n if not valid\n return\n\n next = current.next()\n current.toggleClass('active')\n next.toggleClass('active')\n step = next.data('step')\n $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(step)\n\n $el.on \"click\", \".button-prev\", (event) ->\n event.preventDefault()\n current = $el.find(\".active\")\n prev = current.prev()\n current.toggleClass('active')\n prev.toggleClass('active')\n step = prev.data('step')\n $el.find('.progress-bar').removeClass().addClass('progress-bar').addClass(step)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $el.on \"click\", \".close\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n openLightbox()\n\n directive = {\n link: link,\n templateUrl: \"project/wizard-create-project.html\"\n scope: {}\n }\n\n return directive\n\n\nmodule.directive(\"tgLbCreateProject\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\",\n \"$location\", \"$tgNavUrls\", \"$tgResources\", \"$projectUrl\", \"$tgLoading\",\n \"lightboxService\", \"$cacheFactory\", \"$translate\", \"tgCurrentUserService\", CreateProject])\n\n\n#############################################################################\n## Delete Project Lightbox Directive\n#############################################################################\n\nDeleteProjectDirective = ($repo, $rootscope, $auth, $location, $navUrls, $confirm, lightboxService, tgLoader, currentUserService) ->\n link = ($scope, $el, $attrs) ->\n projectToDelete = null\n $scope.$on \"deletelightbox:new\", (ctx, project)->\n lightboxService.open($el)\n projectToDelete = project\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n submit = ->\n tgLoader.start()\n lightboxService.close($el)\n\n promise = $repo.remove(projectToDelete)\n\n promise.then (data) ->\n tgLoader.pageLoaded()\n $rootscope.$broadcast(\"projects:reload\")\n $location.path($navUrls.resolve(\"home\"))\n $confirm.notify(\"success\")\n currentUserService.loadProjects()\n\n # FIXME: error handling?\n promise.then null, ->\n $confirm.notify(\"error\")\n lightboxService.close($el)\n\n $el.on \"click\", \".button-red\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n $el.on \"click\", \".button-green\", (event) ->\n event.preventDefault()\n submit()\n\n return {link:link}\n\nmodule.directive(\"tgLbDeleteProject\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\",\n \"$tgConfirm\", \"lightboxService\", \"tgLoader\", \"tgCurrentUserService\", DeleteProjectDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/bind.coffee\n###\n\nbindOnce = @.taiga.bindOnce\n\n# Escape Html bind once directive\nBindOnceBindDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoBind, (val) ->\n $el.text(val)\n\n return {link:link}\n\n# Html bind once directive\nBindOnceHtmlDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoHtml, (val) ->\n $el.html(val)\n\n return {link:link}\n\n# Object reference bind once helper.\nBindOnceRefDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoRef, (val) ->\n $el.html(\"##{val} \")\n return {link:link}\n\n# Object src bind once helper.\nBindOnceSrcDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoSrc, (val) ->\n $el.attr(\"src\", val)\n return {link:link}\n\n# Object href bind once helper.\nBindOnceHrefDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoHref, (val) ->\n $el.attr(\"href\", val)\n return {link:link}\n\n# Object alt bind once helper.\nBindOnceAltDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoAlt, (val) ->\n $el.attr(\"alt\", val)\n return {link:link}\n\n# Object title bind once helper.\nBindOnceTitleDirective = ->\n link = ($scope, $el, $attrs) ->\n bindOnce $scope, $attrs.tgBoTitle, (val) ->\n $el.attr(\"title\", val)\n return {link:link}\n\nBindTitleDirective = ->\n link = ($scope, $el, $attrs) ->\n $scope.$watch $attrs.tgTitleHtml, (val) ->\n $el.attr(\"title\", val) if val?\n\n return {link:link}\n\nBindHtmlDirective = ->\n link = ($scope, $el, $attrs) ->\n $scope.$watch $attrs.tgBindHtml, (val) ->\n $el.html(val) if val?\n\n return {link:link}\n\nmodule = angular.module(\"taigaBase\")\nmodule.directive(\"tgBoBind\", BindOnceBindDirective)\nmodule.directive(\"tgBoHtml\", BindOnceHtmlDirective)\nmodule.directive(\"tgBoRef\", BindOnceRefDirective)\nmodule.directive(\"tgBoSrc\", BindOnceSrcDirective)\nmodule.directive(\"tgBoHref\", BindOnceHrefDirective)\nmodule.directive(\"tgBoAlt\", BindOnceAltDirective)\nmodule.directive(\"tgBoTitle\", BindOnceTitleDirective)\nmodule.directive(\"tgBindTitle\", BindTitleDirective)\nmodule.directive(\"tgBindHtml\", BindHtmlDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/conf.coffee\n###\n\nclass ConfigurationService\n constructor: () ->\n @.config = window.taigaConfig\n\n get: (key, defaultValue=null) ->\n if _.has(@.config, key)\n return @.config[key]\n return defaultValue\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgConfig\", ConfigurationService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/contrib.coffee\n###\n\ntaigaContribPlugins = @.taigaContribPlugins = @.taigaContribPlugins or []\n\nclass ContribController extends taiga.Controller\n @.$inject = [\n \"$rootScope\",\n \"$scope\",\n \"$routeParams\",\n \"$tgRepo\",\n \"$tgResources\",\n \"$tgConfirm\"\n ]\n\n constructor: (@rootScope, @scope, @params, @repo, @rs, @confirm) ->\n @scope.adminPlugins = _.where(@rootScope.contribPlugins, {\"type\": \"admin\"})\n @scope.currentPlugin = _.first(_.where(@scope.adminPlugins, {\"slug\": @params.plugin}))\n @scope.pluginTemplate = \"contrib/#{@scope.currentPlugin.slug}\"\n @scope.projectSlug = @params.pslug\n\n promise = @.loadInitialData()\n\n promise.then null, =>\n @confirm.notify(\"error\")\n\n loadProject: ->\n return @rs.projects.getBySlug(@params.pslug).then (project) =>\n @scope.projectId = project.id\n @scope.project = project\n @scope.$emit('project:loaded', project)\n @scope.$broadcast('project:loaded', project)\n return project\n\n loadInitialData: ->\n return @.loadProject()\n\nmodule = angular.module(\"taigaBase\")\nmodule.controller(\"ContribController\", ContribController)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/filters.coffee\n###\n\n\ntaiga = @.taiga\n\nclass FiltersStorageService extends taiga.Service\n @.$inject = [\"$tgStorage\", \"$routeParams\"]\n\n constructor: (@storage, @params) ->\n\n generateHash: (components=[]) ->\n components = _.map(components, (x) -> JSON.stringify(x))\n return hex_sha1(components.join(\":\"))\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/http.coffee\n###\n\ntaiga = @.taiga\n\nclass HttpService extends taiga.Service\n @.$inject = [\"$http\", \"$q\", \"$tgStorage\", \"$rootScope\", \"$cacheFactory\", \"$translate\"]\n\n constructor: (@http, @q, @storage, @rootScope, @cacheFactory, @translate) ->\n super()\n\n @.cache = @cacheFactory(\"httpget\");\n headers: ->\n headers = {}\n\n # Authorization\n token = @storage.get('token')\n if token\n headers[\"Authorization\"] = \"Bearer #{token}\"\n\n # Accept-Language\n lang = @translate.preferredLanguage()\n if lang\n headers[\"Accept-Language\"] = lang\n\n return headers\n\n request: (options) ->\n options.headers = _.merge({}, options.headers or {}, @.headers())\n if _.isPlainObject(options.data)\n options.data = JSON.stringify(options.data)\n\n return @http(options)\n\n get: (url, params, options) ->\n options = _.merge({method: \"GET\", url: url}, options)\n options.params = params if params\n\n # prevent duplicated http request\n options.cache = @.cache\n\n return @.request(options).finally (data) =>\n @.cache.removeAll()\n\n post: (url, data, params, options) ->\n options = _.merge({method: \"POST\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n put: (url, data, params, options) ->\n options = _.merge({method: \"PUT\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n patch: (url, data, params, options) ->\n options = _.merge({method: \"PATCH\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n delete: (url, data, params, options) ->\n options = _.merge({method: \"DELETE\", url: url}, options)\n options.data = data if data\n options.params = params if params\n return @.request(options)\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgHttp\", HttpService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/location.coffee\n###\n\n\nlocationFactory = ($location, $route, $rootscope) ->\n $location.noreload = (scope) ->\n lastRoute = $route.current\n un = scope.$on \"$locationChangeSuccess\", ->\n $route.current = lastRoute\n un()\n\n return $location\n\n $location.isInCurrentRouteParams = (name, value) ->\n params = $location.search() || {}\n\n return params[name] == value\n\n return $location\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.factory(\"$tgLocation\", [\"$location\", \"$route\", \"$rootScope\", locationFactory])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/model.coffee\n###\n\nclass Model\n constructor: (name, data, dataTypes) ->\n @._attrs = data\n @._name = name\n @._dataTypes = dataTypes\n\n @.setAttrs(data)\n @.initialize()\n\n clone: ->\n instance = new Model(@._name, @._attrs, @._dataTypes)\n instance._modifiedAttrs = @._modifiedAttrs\n instance._isModified = @._isModified\n return instance\n\n applyCasts: ->\n for attrName, castName of @._dataTypes\n castMethod = service.casts[castName]\n if not castMethod\n continue\n\n @._attrs[attrName] = castMethod(@._attrs[attrName])\n\n getIdAttrName: ->\n return \"id\"\n\n getName: ->\n return @._name\n\n getAttrs: (patch=false) ->\n if @._attrs.version?\n @._modifiedAttrs.version = @._attrs.version\n\n if patch\n return _.extend({}, @._modifiedAttrs)\n return _.extend({}, @._attrs, @._modifiedAttrs)\n\n setAttrs: (attrs) ->\n @._attrs = attrs\n @._modifiedAttrs = {}\n\n @.applyCasts()\n @._isModified = false\n\n setAttr: (name, value) ->\n @._modifiedAttrs[name] = value\n @._isModified = true\n\n initialize: () ->\n self = @\n\n getter = (name) ->\n return ->\n if typeof(name) == 'string' and name.substr(0,2) == \"__\"\n return self[name]\n\n if name not in _.keys(self._modifiedAttrs)\n return self._attrs[name]\n\n return self._modifiedAttrs[name]\n\n setter = (name) ->\n return (value) ->\n if typeof(name) == 'string' and name.substr(0,2) == \"__\"\n self[name] = value\n return\n\n if self._attrs[name] != value\n self._modifiedAttrs[name] = value\n self._isModified = true\n else\n delete self._modifiedAttrs[name]\n\n return\n\n _.each @_attrs, (value, name) ->\n options =\n get: getter(name)\n set: setter(name)\n enumerable: true\n configurable: true\n\n Object.defineProperty(self, name, options)\n\n serialize: () ->\n data =\n \"data\": _.clone(@_attrs)\n \"name\": @_name\n\n return JSON.stringify(data)\n\n isModified: ->\n return this._isModified\n\n isAttributeModified: (attribute) ->\n return @._modifiedAttrs[attribute]?\n\n markSaved: () ->\n @._isModified = false\n @._attrs = @.getAttrs()\n @._modifiedAttrs = {}\n\n revert: () ->\n @_modifiedAttrs = {}\n @_isModified = false\n\n @desSerialize = (sdata) ->\n ddata = JSON.parse(sdata)\n model = new Model(ddata.url, ddata.data)\n return model\n\n\ntaiga = @.taiga\n\nclass ModelService extends taiga.Service\n @.$inject = [\"$q\", \"$tgUrls\", \"$tgStorage\", \"$tgHttp\"]\n\n constructor: (@q, @urls, @storage, @http) ->\n super()\n\nprovider = ($q, $http, $gmUrls, $gmStorage) ->\n service = {}\n service.make_model = (name, data, cls=Model, dataTypes={}) ->\n return new cls(name, data, dataTypes)\n\n service.cls = Model\n service.casts = {\n int: (value) ->\n return parseInt(value, 10)\n\n float: (value) ->\n return parseFloat(value, 10)\n }\n\n return service\n\nmodule = angular.module(\"taigaBase\")\nmodule.factory(\"$tgModel\", [\"$q\", \"$http\", \"$tgUrls\", \"$tgStorage\", provider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/navurl.coffee\n###\n\ntaiga = @.taiga\ntrim = @.taiga.trim\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaBase\")\n\n\n#############################################################################\n## Navigation Urls Service\n#############################################################################\n\nclass NavigationUrlsService extends taiga.Service\n constructor: ->\n @.urls = {}\n\n update: (urls) ->\n @.urls = _.merge({}, @.urls, urls or {})\n\n formatUrl: (url, ctx={}) ->\n replacer = (match) ->\n match = trim(match, \":\")\n return ctx[match] or \"undefined\"\n return url.replace(/(:\\w+)/g, replacer)\n\n resolve: (name, ctx) ->\n url = @.urls[name]\n return \"\" if not url\n return @.formatUrl(url, ctx) if ctx\n return url\n\nmodule.service(\"$tgNavUrls\", NavigationUrlsService)\n\n\n#############################################################################\n## Navigation Urls Directive\n#############################################################################\n\nNavigationUrlsDirective = ($navurls, $auth, $q, $location) ->\n # Example:\n # link(tg-nav=\"project-backlog:project='sss',\")\n\n # bindOnce version that uses $q for offer\n # promise based api\n bindOnceP = ($scope, attr) ->\n defered = $q.defer()\n bindOnce $scope, attr, (v) ->\n defered.resolve(v)\n return defered.promise\n\n parseNav = (data, $scope) ->\n [name, params] = _.map(data.split(\":\"), trim)\n if params\n # split by 'xxx='\n # example\n # project=vm.timeline.getIn(['data', 'project', 'slug']), ref=vm.timeline.getIn(['obj', 'ref'])\n # [\"\", \"project\", \"vm.timeline.getIn(['data', 'project', 'slug']), \", \"ref\", \"vm.timeline.getIn(['obj', 'ref'])\"]\n result = params.split(/(\\w+)=/)\n\n # remove empty string\n result = _.filter result, (str) -> return str.length\n\n # remove , at the end of the string\n result = _.map result, (str) -> return trim(str.replace(/,$/g, ''))\n\n params = []\n index = 0\n\n # ['param1', 'value'] => [{'param1': 'value'}]\n while index < result.length\n obj = {}\n obj[result[index]] = result[index + 1]\n params.push obj\n index = index + 2\n else\n params = []\n\n values = _.map params, (param) -> _.values(param)[0]\n promises = _.map(values, (x) -> bindOnceP($scope, x))\n\n return $q.all(promises).then ->\n options = {}\n for param in params\n key = Object.keys(param)[0]\n value = param[key]\n\n options[key] = $scope.$eval(value)\n return [name, options]\n\n link = ($scope, $el, $attrs) ->\n if $el.is(\"a\")\n $el.attr(\"href\", \"#\")\n\n $el.on \"mouseenter\", (event) ->\n target = $(event.currentTarget)\n\n if !target.data(\"fullUrl\")\n parseNav($attrs.tgNav, $scope).then (result) ->\n [name, options] = result\n user = $auth.getUser()\n options.user = user.username if user\n\n url = $navurls.resolve(name)\n fullUrl = $navurls.formatUrl(url, options)\n\n if $attrs.tgNavGetParams\n getURLParams = JSON.parse($attrs.tgNavGetParams)\n getURLParamsStr = $.param(getURLParams)\n fullUrl = \"#{fullUrl}?#{getURLParamsStr}\"\n\n target.data(\"fullUrl\", fullUrl)\n\n if target.is(\"a\")\n target.attr(\"href\", fullUrl)\n\n $el.on \"click\", (event) ->\n if event.metaKey || event.ctrlKey\n return\n\n event.preventDefault()\n target = $(event.currentTarget)\n\n if target.hasClass('noclick')\n return\n\n fullUrl = target.data(\"fullUrl\")\n\n switch event.which\n when 1\n $location.url(fullUrl)\n $scope.$apply()\n when 2\n window.open fullUrl\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link: link}\n\nmodule.directive(\"tgNav\", [\"$tgNavUrls\", \"$tgAuth\", \"$q\", \"$tgLocation\", NavigationUrlsDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/repository.coffee\n###\n\ntaiga = @.taiga\n\nclass RepositoryService extends taiga.Service\n @.$inject = [\"$q\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\"]\n\n constructor: (@q, @model, @storage, @http, @urls) ->\n super()\n\n resolveUrlForModel: (model) ->\n idAttrName = model.getIdAttrName()\n return \"#{@urls.resolve(model.getName())}/#{model[idAttrName]}\"\n\n resolveUrlForAttributeModel: (model) ->\n return @urls.resolve(model.getName(), model.parent)\n\n create: (name, data, dataTypes={}, extraParams={}) ->\n defered = @q.defer()\n url = @urls.resolve(name)\n\n promise = @http.post(url, JSON.stringify(data))\n promise.success (_data, _status) =>\n defered.resolve(@model.make_model(name, _data, null, dataTypes))\n\n promise.error (data, status) =>\n defered.reject(data)\n\n return defered.promise\n\n remove: (model, params={}) ->\n defered = @q.defer()\n url = @.resolveUrlForModel(model)\n\n promise = @http.delete(url, {}, params)\n promise.success (data, status) ->\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(model)\n\n return defered.promise\n\n saveAll: (models, patch=true) ->\n promises = _.map(models, (x) => @.save(x, true))\n return @q.all(promises)\n\n save: (model, patch=true) ->\n defered = @q.defer()\n\n if not model.isModified() and patch\n defered.resolve(model)\n return defered.promise\n\n url = @.resolveUrlForModel(model)\n data = JSON.stringify(model.getAttrs(patch))\n\n if patch\n promise = @http.patch(url, data)\n else\n promise = @http.put(url, data)\n\n promise.success (data, status) =>\n model._isModified = false\n model._attrs = _.extend(model.getAttrs(), data)\n model._modifiedAttrs = {}\n\n model.applyCasts()\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(data)\n\n return defered.promise\n\n saveAttribute: (model, attribute, patch=true) ->\n defered = @q.defer()\n\n if not model.isModified() and patch\n defered.resolve(model)\n return defered.promise\n\n url = @.resolveUrlForAttributeModel(model)\n\n data = {}\n\n data[attribute] = model.getAttrs()\n\n if patch\n promise = @http.patch(url, data)\n else\n promise = @http.put(url, data)\n\n promise.success (data, status) =>\n model._isModified = false\n model._attrs = _.extend(model.getAttrs(), data)\n model._modifiedAttrs = {}\n\n model.applyCasts()\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(data)\n\n return defered.promise\n\n refresh: (model) ->\n defered = @q.defer()\n\n url = @.resolveUrlForModel(model)\n promise = @http.get(url)\n promise.success (data, status) ->\n model._modifiedAttrs = {}\n model._attrs = data\n model._isModified = false\n model.applyCasts()\n defered.resolve(model)\n\n promise.error (data, status) ->\n defered.reject(data)\n\n return defered.promise\n\n queryMany: (name, params, options={}, headers=false) ->\n url = @urls.resolve(name)\n httpOptions = {headers: {}}\n\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return @http.get(url, params, httpOptions).then (data) =>\n result = _.map(data.data, (x) => @model.make_model(name, x))\n\n if headers\n return [result, data.headers]\n\n return result\n\n queryOneAttribute: (name, id, attribute, params, options={}) ->\n url = @urls.resolve(name, id)\n httpOptions = {headers: {}}\n\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return @http.get(url, params, httpOptions).then (data) =>\n model = @model.make_model(name, data.data[attribute])\n model.parent = id\n\n return model\n\n queryOne: (name, id, params, options={}) ->\n url = @urls.resolve(name)\n url = \"#{url}/#{id}\" if id\n httpOptions = {headers: {}}\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return @http.get(url, params, httpOptions).then (data) =>\n return @model.make_model(name, data.data)\n\n queryOneRaw: (name, id, params, options={}) ->\n url = @urls.resolve(name)\n url = \"#{url}/#{id}\" if id\n httpOptions = _.merge({headers: {}}, options)\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n return @http.get(url, params, httpOptions).then (data) =>\n return data.data\n\n queryPaginated: (name, params, options={}) ->\n url = @urls.resolve(name)\n httpOptions = _.merge({headers: {}}, options)\n return @http.get(url, params, httpOptions).then (data) =>\n headers = data.headers()\n result = {}\n result.models = _.map(data.data, (x) => @model.make_model(name, x))\n result.count = parseInt(headers[\"x-pagination-count\"], 10)\n result.current = parseInt(headers[\"x-pagination-current\"] or 1, 10)\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10)\n return result\n\n queryOnePaginatedRaw: (name, id, params, options={}) ->\n url = @urls.resolve(name)\n url = \"#{url}/#{id}\" if id\n httpOptions = _.merge({headers: {}}, options)\n\n return @http.get(url, params, httpOptions).then (data) =>\n headers = data.headers()\n result = {}\n result.data = data.data\n result.count = parseInt(headers[\"x-pagination-count\"], 10)\n result.current = parseInt(headers[\"x-pagination-current\"] or 1, 10)\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10)\n\n return result\n\n resolve: (options) ->\n params = {}\n params.project = options.pslug if options.pslug?\n params.us = options.usref if options.usref?\n params.task = options.taskref if options.taskref?\n params.issue = options.issueref if options.issueref?\n params.milestone = options.sslug if options.sslug?\n params.wikipage = options.wikipage if options.wikipage?\n\n cache = not (options.wikipage or options.sslug)\n return @.queryOneRaw(\"resolver\", null, params, {cache: cache})\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgRepo\", RepositoryService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/storage.coffee\n###\n\ntaiga = @.taiga\n\nclass StorageService extends taiga.Service\n @.$inject = [\"$rootScope\"]\n\n constructor: ($rootScope) ->\n super()\n\n get: (key, _default) ->\n serializedValue = localStorage.getItem(key)\n if serializedValue == null\n return _default or null\n\n return JSON.parse(serializedValue)\n\n set: (key, val) ->\n if _.isObject(key)\n _.each key, (val, key) =>\n @set(key, val)\n else\n localStorage.setItem(key, JSON.stringify(val))\n\n contains: (key) ->\n value = @.get(key)\n return (value != null)\n\n remove: (key) ->\n localStorage.removeItem(key)\n\n clear: ->\n localStorage.clear()\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service(\"$tgStorage\", StorageService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/base/http.coffee\n###\n\nformat = (fmt, obj) ->\n obj = _.clone(obj)\n return fmt.replace /%s/g, (match) -> String(obj.shift())\n\ntaiga = @.taiga\n\nclass UrlsService extends taiga.Service\n @.$inject = [\"$tgConfig\"]\n\n constructor: (@config) ->\n @.urls = {}\n @.mainUrl = @config.get(\"api\")\n\n update: (urls) ->\n @.urls = _.merge(@.urls, urls)\n\n resolve: ->\n args = _.toArray(arguments)\n\n if args.length == 0\n throw Error(\"wrong arguments to setUrls\")\n\n name = args.slice(0, 1)[0]\n url = format(@.urls[name], args.slice(1))\n\n return format(\"%s/%s\", [\n _.str.rtrim(@.mainUrl, \"/\"),\n _.str.ltrim(url, \"/\")\n ])\n\n resolveAbsolute: ->\n url = @.resolve.apply(@, arguments)\n if (/^https?:\\/\\//i).test(url)\n return url\n if (/^\\//).test(url)\n return \"#{window.location.protocol}//#{window.location.host}#{url}\"\n return \"#{window.location.protocol}//#{window.location.host}/#{url}\"\n\n\nmodule = angular.module(\"taigaBase\")\nmodule.service('$tgUrls', UrlsService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/attachments.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($rootScope, $config, $urls, $model, $repo, $auth, $q) ->\n service = {}\n\n service.list = (urlName, objectId, projectId) ->\n params = {object_id: objectId, project: projectId}\n return $repo.queryMany(urlName, params)\n\n service.create = (urlName, projectId, objectId, file) ->\n defered = $q.defer()\n\n if file is undefined\n defered.reject(null)\n return defered.promise\n\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n if maxFileSize and file.size > maxFileSize\n response = {\n status: 413,\n data: _error_message: \"'#{file.name}' (#{sizeFormat(file.size)}) is too heavy for our oompa\n loompas, try it with a smaller than (#{sizeFormat(maxFileSize)})\"\n }\n defered.reject(response)\n return defered.promise\n\n uploadProgress = (evt) =>\n $rootScope.$apply =>\n file.status = \"in-progress\"\n file.size = sizeFormat(evt.total)\n file.progressMessage = \"upload #{sizeFormat(evt.loaded)} of #{sizeFormat(evt.total)}\"\n file.progressPercent = \"#{Math.round((evt.loaded / evt.total) * 100)}%\"\n\n uploadComplete = (evt) =>\n $rootScope.$apply ->\n file.status = \"done\"\n\n status = evt.target.status\n try\n data = JSON.parse(evt.target.responseText)\n catch\n data = {}\n\n if status >= 200 and status < 400\n model = $model.make_model(urlName, data)\n defered.resolve(model)\n else\n response = {\n status: status,\n data: {_error_message: data['attached_file']?[0]}\n }\n defered.reject(response)\n\n uploadFailed = (evt) =>\n $rootScope.$apply ->\n file.status = \"error\"\n defered.reject(\"fail\")\n\n data = new FormData()\n data.append(\"project\", projectId)\n data.append(\"object_id\", objectId)\n data.append(\"attached_file\", file)\n\n xhr = new XMLHttpRequest()\n xhr.upload.addEventListener(\"progress\", uploadProgress, false)\n xhr.addEventListener(\"load\", uploadComplete, false)\n xhr.addEventListener(\"error\", uploadFailed, false)\n\n xhr.open(\"POST\", $urls.resolve(urlName))\n xhr.setRequestHeader(\"Authorization\", \"Bearer #{$auth.getToken()}\")\n xhr.setRequestHeader('Accept', 'application/json')\n xhr.send(data)\n\n return defered.promise\n\n return (instance) ->\n instance.attachments = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgAttachmentsResourcesProvider\", [\"$rootScope\", \"$tgConfig\", \"$tgUrls\", \"$tgModel\", \"$tgRepo\",\n \"$tgAuth\", \"$q\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/custom-field-values.coffee\n###\n\ntaiga = @.taiga\n\nresourceProvider = ($repo) ->\n _get = (objectId, resource) ->\n return $repo.queryOne(resource, objectId)\n\n service = {\n userstory: {\n get: (objectId) -> _get(objectId, \"custom-attributes-values/userstory\")\n }\n task: {\n get: (objectId) -> _get(objectId, \"custom-attributes-values/task\")\n }\n issue: {\n get: (objectId) -> _get(objectId, \"custom-attributes-values/issue\")\n }\n }\n\n return (instance) ->\n instance.customAttributesValues = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgCustomAttributesValuesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/projects.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($repo) ->\n _list = (projectId, resource) ->\n return $repo.queryMany(resource, {project: projectId})\n\n service = {\n userstory:{\n list: (projectId) -> _list(projectId, \"custom-attributes/userstory\")\n }\n task:{\n list: (projectId) -> _list(projectId, \"custom-attributes/task\")\n }\n issue: {\n list: (projectId) -> _list(projectId, \"custom-attributes/issue\")\n }\n }\n\n return (instance) ->\n instance.customAttributes = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgCustomAttributesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/history.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (type, objectId) ->\n return $repo.queryOneRaw(\"history/#{type}\", objectId)\n\n service.deleteComment = (type, objectId, activityId) ->\n url = $urls.resolve(\"history/#{type}\")\n url = \"#{url}/#{objectId}/delete_comment\"\n params = {id: activityId}\n return $http.post(url, null, params).then (data) =>\n return data.data\n\n service.undeleteComment = (type, objectId, activityId) ->\n url = $urls.resolve(\"history/#{type}\")\n url = \"#{url}/#{objectId}/undelete_comment\"\n params = {id: activityId}\n return $http.post(url, null, params).then (data) =>\n return data.data\n\n return (instance) ->\n instance.history = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgHistoryResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/projects.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo) ->\n service = {}\n\n service.get = (token) ->\n return $repo.queryOne(\"invitations\", token)\n\n return (instance) ->\n instance.invitations = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgInvitationsResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/issues.coffee\n###\n\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $http, $urls, $storage, $q) ->\n service = {}\n hashSuffix = \"issues-queryparams\"\n filtersHashSuffix = \"issues-filters\"\n myFiltersHashSuffix = \"issues-my-filters\"\n\n service.get = (projectId, issueId) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n return $repo.queryOne(\"issues\", issueId, params)\n\n service.getByRef = (projectId, ref) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n params.ref = ref\n return $repo.queryOne(\"issues\", \"by_ref\", params)\n\n service.listInAllProjects = (filters) ->\n return $repo.queryMany(\"issues\", filters)\n\n service.list = (projectId, filters, options) ->\n params = {project: projectId}\n params = _.extend({}, params, filters or {})\n service.storeQueryParams(projectId, params)\n return $repo.queryPaginated(\"issues\", params, options)\n\n service.bulkCreate = (projectId, data) ->\n url = $urls.resolve(\"bulk-create-issues\")\n params = {project_id: projectId, bulk_issues: data}\n return $http.post(url, params)\n\n service.upvote = (issueId) ->\n url = $urls.resolve(\"issue-upvote\", issueId)\n return $http.post(url)\n\n service.downvote = (issueId) ->\n url = $urls.resolve(\"issue-downvote\", issueId)\n return $http.post(url)\n\n service.watch = (issueId) ->\n url = $urls.resolve(\"issue-watch\", issueId)\n return $http.post(url)\n\n service.unwatch = (issueId) ->\n url = $urls.resolve(\"issue-unwatch\", issueId)\n return $http.post(url)\n\n service.stats = (projectId) ->\n return $repo.queryOneRaw(\"projects\", \"#{projectId}/issues_stats\")\n\n service.filtersData = (params) ->\n return $repo.queryOneRaw(\"issues-filters\", null, params)\n\n service.listValues = (projectId, type) ->\n params = {\"project\": projectId}\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(type, params)\n\n service.storeQueryParams = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getQueryParams = (projectId) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeFilters = (projectSlug, params) ->\n ns = \"#{projectSlug}:#{filtersHashSuffix}\"\n hash = generateHash([projectSlug, ns])\n $storage.set(hash, params)\n\n service.getFilters = (projectSlug) ->\n ns = \"#{projectSlug}:#{filtersHashSuffix}\"\n hash = generateHash([projectSlug, ns])\n return $storage.get(hash) or {}\n\n service.storeMyFilters = (projectId, myFilters) ->\n deferred = $q.defer()\n url = $urls.resolve(\"user-storage\")\n ns = \"#{projectId}:#{myFiltersHashSuffix}\"\n hash = generateHash([projectId, ns])\n if _.isEmpty(myFilters)\n promise = $http.delete(\"#{url}/#{hash}\", {key: hash, value:myFilters})\n promise.then ->\n deferred.resolve()\n promise.then null, ->\n deferred.reject()\n else\n promise = $http.put(\"#{url}/#{hash}\", {key: hash, value:myFilters})\n promise.then (data) ->\n deferred.resolve()\n promise.then null, (data) ->\n innerPromise = $http.post(\"#{url}\", {key: hash, value:myFilters})\n innerPromise.then ->\n deferred.resolve()\n innerPromise.then null, ->\n deferred.reject()\n return deferred.promise\n\n service.getMyFilters = (projectId) ->\n deferred = $q.defer()\n url = $urls.resolve(\"user-storage\")\n ns = \"#{projectId}:#{myFiltersHashSuffix}\"\n hash = generateHash([projectId, ns])\n\n promise = $http.get(\"#{url}/#{hash}\")\n promise.then (data) ->\n deferred.resolve(data.data.value)\n promise.then null, (data) ->\n deferred.resolve({})\n\n return deferred.promise\n\n return (instance) ->\n instance.issues = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgIssuesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/kanban.coffee\n###\n\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($storage) ->\n service = {}\n hashSuffixStatusViewModes = \"kanban-statusviewmodels\"\n hashSuffixStatusColumnModes = \"kanban-statuscolumnmodels\"\n\n service.storeStatusViewModes = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffixStatusViewModes}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getStatusViewModes = (projectId) ->\n ns = \"#{projectId}:#{hashSuffixStatusViewModes}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeStatusColumnModes = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getStatusColumnModes = (projectId) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n return (instance) ->\n instance.kanban = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgKanbanResourcesProvider\", [\"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2015 Andrey Antukh \n# Copyright (C) 2015 Jesús Espino Garcia \n# Copyright (C) 2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/locales.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($repo) ->\n service = {\n list: -> return $repo.queryMany(\"locales\")\n }\n\n return (instance) ->\n instance.locales = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgLocalesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/mdrender.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.render = (projectId, content) ->\n # We can't use an empty content\n content = ' ' if not content? or content == \"\"\n\n params = {\n project_id: projectId\n content: content\n }\n url = $urls.resolve(\"wiki\")\n return $http.post(\"#{url}/render\", params).then (data) =>\n return data.data\n\n return (instance) ->\n instance.mdrender = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgMdRenderResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (id) ->\n return $repo.queryOne(\"memberships\", id)\n\n service.list = (projectId, filters, enablePagination=true) ->\n params = {project: projectId}\n params = _.extend({}, params, filters or {})\n if enablePagination\n return $repo.queryPaginated(\"memberships\", params)\n\n return $repo.queryMany(\"memberships\", params, options={enablePagination:enablePagination})\n\n service.listByUser = (userId, filters) ->\n params = {user: userId}\n params = _.extend({}, params, filters or {})\n return $repo.queryPaginated(\"memberships\", params)\n\n service.resendInvitation = (id) ->\n url = $urls.resolve(\"memberships\")\n return $http.post(\"#{url}/#{id}/resend_invitation\", {})\n\n service.bulkCreateMemberships = (projectId, data, invitation_extra_text) ->\n url = $urls.resolve(\"bulk-create-memberships\")\n params = {project_id: projectId, bulk_memberships: data, invitation_extra_text: invitation_extra_text}\n return $http.post(url, params)\n\n return (instance) ->\n instance.memberships = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgMembershipsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules.coffee\n###\n\nresourceProvider = ($repo) ->\n service = {}\n\n service.list = (projectId, module) ->\n return $repo.queryOneAttribute(\"project-modules\", projectId, module)\n\n return (instance) ->\n instance.modules = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgModulesResourcesProvider\", [\"$tgRepo\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (id) ->\n return $repo.queryOne(\"notify-policies\", id)\n\n service.list = (filters) ->\n params = _.extend({}, params, filters or {})\n return $repo.queryMany(\"notify-policies\", params)\n\n return (instance) ->\n instance.notifyPolicies = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgNotifyPoliciesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/projects.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($config, $repo, $http, $urls, $auth, $q, $translate) ->\n service = {}\n\n service.get = (projectId) ->\n return $repo.queryOne(\"projects\", projectId)\n\n service.getBySlug = (projectSlug) ->\n return $repo.queryOne(\"projects\", \"by_slug?slug=#{projectSlug}\")\n\n service.list = ->\n return $repo.queryMany(\"projects\")\n\n service.listByMember = (memberId) ->\n params = {\"member\": memberId, \"order_by\": \"memberships__user_order\"}\n return $repo.queryMany(\"projects\", params)\n\n service.templates = ->\n return $repo.queryMany(\"project-templates\")\n\n service.usersList = (projectId) ->\n params = {\"project\": projectId}\n return $repo.queryMany(\"users\", params)\n\n service.rolesList = (projectId) ->\n params = {\"project\": projectId}\n return $repo.queryMany(\"roles\", params)\n\n service.stats = (projectId) ->\n return $repo.queryOneRaw(\"projects\", \"#{projectId}/stats\")\n\n service.bulkUpdateOrder = (bulkData) ->\n url = $urls.resolve(\"bulk-update-projects-order\")\n return $http.post(url, bulkData)\n\n service.regenerate_userstories_csv_uuid = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/regenerate_userstories_csv_uuid\"\n return $http.post(url)\n\n service.regenerate_issues_csv_uuid = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/regenerate_issues_csv_uuid\"\n return $http.post(url)\n\n service.regenerate_tasks_csv_uuid = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/regenerate_tasks_csv_uuid\"\n return $http.post(url)\n\n service.leave = (projectId) ->\n url = \"#{$urls.resolve(\"projects\")}/#{projectId}/leave\"\n return $http.post(url)\n\n service.memberStats = (projectId) ->\n return $repo.queryOneRaw(\"projects\", \"#{projectId}/member_stats\")\n\n service.tagsColors = (projectId) ->\n return $repo.queryOne(\"projects\", \"#{projectId}/tags_colors\")\n\n service.export = (projectId) ->\n url = \"#{$urls.resolve(\"exporter\")}/#{projectId}\"\n return $http.get(url)\n\n service.import = (file, statusUpdater) ->\n defered = $q.defer()\n\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n if maxFileSize and file.size > maxFileSize\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED\", {\n fileName: file.name\n fileSize: sizeFormat(file.size)\n maxFileSize: sizeFormat(maxFileSize)\n })\n\n response = {\n status: 413,\n data: _error_message: errorMsg\n }\n defered.reject(response)\n return defered.promise\n\n uploadProgress = (evt) =>\n percent = Math.round((evt.loaded / evt.total) * 100)\n message = $translate.instant(\"PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE\", {\n uploadedSize: sizeFormat(evt.loaded)\n totalSize: sizeFormat(evt.total)\n })\n statusUpdater(\"in-progress\", null, message, percent)\n\n uploadComplete = (evt) =>\n statusUpdater(\"done\",\n $translate.instant(\"PROJECT.IMPORT.TITLE\"),\n $translate.instant(\"PROJECT.IMPORT.DESCRIPTION\"))\n\n uploadFailed = (evt) =>\n statusUpdater(\"error\")\n\n complete = (evt) =>\n response = {}\n try\n response.data = JSON.parse(evt.target.responseText)\n catch\n response.data = {}\n response.status = evt.target.status\n\n defered.resolve(response) if response.status in [201, 202]\n defered.reject(response)\n\n failed = (evt) =>\n defered.reject(\"fail\")\n\n data = new FormData()\n data.append('dump', file)\n\n xhr = new XMLHttpRequest()\n xhr.upload.addEventListener(\"progress\", uploadProgress, false)\n xhr.upload.addEventListener(\"load\", uploadComplete, false)\n xhr.upload.addEventListener(\"error\", uploadFailed, false)\n xhr.upload.addEventListener(\"abort\", uploadFailed, false)\n xhr.addEventListener(\"load\", complete, false)\n xhr.addEventListener(\"error\", failed, false)\n\n xhr.open(\"POST\", $urls.resolve(\"importer\"))\n xhr.setRequestHeader(\"Authorization\", \"Bearer #{$auth.getToken()}\")\n xhr.setRequestHeader('Accept', 'application/json')\n xhr.send(data)\n\n return defered.promise\n\n return (instance) ->\n instance.projects = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgProjectsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgAuth\",\n \"$q\", \"$translate\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (id) ->\n return $repo.queryOne(\"roles\", id)\n\n service.list = (projectId) ->\n return $repo.queryMany(\"roles\", {project: projectId})\n\n return (instance) ->\n instance.roles = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgRolesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/search.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.do = (projectId, term) ->\n url = $urls.resolve(\"search\")\n params = {\n project: projectId\n text: term,\n get_all: false\n }\n\n return $http.get(url, params).then (data) ->\n return data.data\n\n return (instance) ->\n instance.search = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgSearchResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/sprints.coffee\n###\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $model, $storage) ->\n service = {}\n\n service.get = (projectId, sprintId) ->\n return $repo.queryOne(\"milestones\", sprintId).then (sprint) ->\n uses = sprint.user_stories\n uses = _.map(uses, (u) -> $model.make_model(\"userstories\", u))\n sprint._attrs.user_stories = uses\n return sprint\n\n service.stats = (projectId, sprintId) ->\n return $repo.queryOneRaw(\"milestones\", \"#{sprintId}/stats\")\n\n service.list = (projectId, filters) ->\n params = {\"project\": projectId}\n params = _.extend({}, params, filters or {})\n return $repo.queryMany(\"milestones\", params, {}, true).then (result) =>\n milestones = result[0]\n headers = result[1]\n\n for m in milestones\n uses = m.user_stories\n uses = _.map(uses, (u) => $model.make_model(\"userstories\", u))\n m._attrs.user_stories = uses\n\n return {\n milestones: milestones,\n closed: parseInt(headers(\"Taiga-Info-Total-Closed-Milestones\"), 10),\n open: parseInt(headers(\"Taiga-Info-Total-Opened-Milestones\"), 10)\n }\n\n\n return (instance) ->\n instance.sprints = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgSprintsResourcesProvider\", [\"$tgRepo\", \"$tgModel\", \"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/tasks.coffee\n###\n\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $http, $urls, $storage) ->\n service = {}\n hashSuffix = \"tasks-queryparams\"\n hashSuffixStatusColumnModes = \"tasks-statuscolumnmodels\"\n hashSuffixUsRowModes = \"tasks-usrowmodels\"\n\n service.get = (projectId, taskId) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n return $repo.queryOne(\"tasks\", taskId, params)\n\n service.getByRef = (projectId, ref) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n params.ref = ref\n return $repo.queryOne(\"tasks\", \"by_ref\", params)\n\n service.listInAllProjects = (filters) ->\n return $repo.queryMany(\"tasks\", filters)\n\n service.list = (projectId, sprintId=null, userStoryId=null) ->\n params = {project: projectId}\n params.milestone = sprintId if sprintId\n params.user_story = userStoryId if userStoryId\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(\"tasks\", params)\n\n service.bulkCreate = (projectId, sprintId, usId, data) ->\n url = $urls.resolve(\"bulk-create-tasks\")\n params = {project_id: projectId, sprint_id: sprintId, us_id: usId, bulk_tasks: data}\n return $http.post(url, params).then (result) ->\n return result.data\n\n service.upvote = (taskId) ->\n url = $urls.resolve(\"task-upvote\", taskId)\n return $http.post(url)\n\n service.downvote = (taskId) ->\n url = $urls.resolve(\"task-downvote\", taskId)\n return $http.post(url)\n\n service.watch = (taskId) ->\n url = $urls.resolve(\"task-watch\", taskId)\n return $http.post(url)\n\n service.unwatch = (taskId) ->\n url = $urls.resolve(\"task-unwatch\", taskId)\n return $http.post(url)\n\n service.bulkUpdateTaskTaskboardOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-task-taskboard-order\")\n params = {project_id: projectId, bulk_tasks: data}\n return $http.post(url, params)\n\n service.listValues = (projectId, type) ->\n params = {\"project\": projectId}\n return $repo.queryMany(type, params)\n\n service.storeQueryParams = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getQueryParams = (projectId) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeStatusColumnModes = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getStatusColumnModes = (projectId) ->\n ns = \"#{projectId}:#{hashSuffixStatusColumnModes}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeUsRowModes = (projectId, sprintId, params) ->\n ns = \"#{projectId}:#{hashSuffixUsRowModes}\"\n hash = generateHash([projectId, sprintId, ns])\n\n $storage.set(hash, params)\n\n service.getUsRowModes = (projectId, sprintId) ->\n ns = \"#{projectId}:#{hashSuffixUsRowModes}\"\n hash = generateHash([projectId, sprintId, ns])\n\n return $storage.get(hash) or {}\n\n return (instance) ->\n instance.tasks = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgTasksResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/memberships.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($config, $repo, $http, $urls, $q) ->\n service = {}\n\n service.changeAvatar = (file) ->\n maxFileSize = $config.get(\"maxUploadFileSize\", null)\n if maxFileSize and file.size > maxFileSize\n response = {\n status: 413,\n data: _error_message: \"'#{file.name}' (#{sizeFormat(file.size)}) is too heavy for our oompa\n loompas, try it with a smaller than (#{sizeFormat(maxFileSize)})\"\n }\n defered = $q.defer()\n defered.reject(response)\n return defered.promise\n\n data = new FormData()\n data.append('avatar', file)\n options = {\n transformRequest: angular.identity,\n headers: {'Content-Type': undefined}\n }\n url = \"#{$urls.resolve(\"users\")}/change_avatar\"\n return $http.post(url, data, {}, options)\n\n service.removeAvatar = () ->\n url = \"#{$urls.resolve(\"users\")}/remove_avatar\"\n return $http.post(url)\n\n service.changePassword = (currentPassword, newPassword) ->\n url = \"#{$urls.resolve(\"users\")}/change_password\"\n data = {\n current_password: currentPassword\n password: newPassword\n }\n return $http.post(url, data)\n\n return (instance) ->\n instance.userSettings = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgUserSettingsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$q\",\n resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/user.coffee\n###\n\n\ntaiga = @.taiga\nsizeFormat = @.taiga.sizeFormat\n\n\nresourceProvider = ($http, $urls) ->\n service = {}\n\n service.contacts = (userId, options={}) ->\n url = $urls.resolve(\"user-contacts\", userId)\n httpOptions = {headers: {}}\n\n if not options.enablePagination\n httpOptions.headers[\"x-disable-pagination\"] = \"1\"\n\n return $http.get(url, {}, httpOptions)\n .then (result) ->\n return result.data\n\n return (instance) ->\n instance.users = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgUsersResourcesProvider\", [\"$tgHttp\", \"$tgUrls\", \"$q\",\n resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/userstories.coffee\n###\n\ntaiga = @.taiga\n\ngenerateHash = taiga.generateHash\n\nresourceProvider = ($repo, $http, $urls, $storage) ->\n service = {}\n hashSuffix = \"userstories-queryparams\"\n\n service.get = (projectId, usId) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n return $repo.queryOne(\"userstories\", usId, params)\n\n service.getByRef = (projectId, ref) ->\n params = service.getQueryParams(projectId)\n params.project = projectId\n params.ref = ref\n return $repo.queryOne(\"userstories\", \"by_ref\", params)\n\n service.listInAllProjects = (filters) ->\n return $repo.queryMany(\"userstories\", filters)\n\n service.filtersData = (params) ->\n return $repo.queryOneRaw(\"userstories-filters\", null, params)\n\n service.listUnassigned = (projectId, filters) ->\n params = {\"project\": projectId, \"milestone\": \"null\"}\n params = _.extend({}, params, filters or {})\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(\"userstories\", params)\n\n service.listAll = (projectId, filters) ->\n params = {\"project\": projectId}\n params = _.extend({}, params, filters or {})\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(\"userstories\", params)\n\n service.bulkCreate = (projectId, status, bulk) ->\n data = {\n project_id: projectId\n status_id: status\n bulk_stories: bulk\n }\n\n url = $urls.resolve(\"bulk-create-us\")\n\n return $http.post(url, data)\n\n service.upvote = (userStoryId) ->\n url = $urls.resolve(\"userstory-upvote\", userStoryId)\n return $http.post(url)\n\n service.downvote = (userStoryId) ->\n url = $urls.resolve(\"userstory-downvote\", userStoryId)\n return $http.post(url)\n\n service.watch = (userStoryId) ->\n url = $urls.resolve(\"userstory-watch\", userStoryId)\n return $http.post(url)\n\n service.unwatch = (userStoryId) ->\n url = $urls.resolve(\"userstory-unwatch\", userStoryId)\n return $http.post(url)\n\n service.bulkUpdateBacklogOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-us-backlog-order\")\n params = {project_id: projectId, bulk_stories: data}\n return $http.post(url, params)\n\n service.bulkUpdateSprintOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-us-sprint-order\")\n params = {project_id: projectId, bulk_stories: data}\n return $http.post(url, params)\n\n service.bulkUpdateKanbanOrder = (projectId, data) ->\n url = $urls.resolve(\"bulk-update-us-kanban-order\")\n params = {project_id: projectId, bulk_stories: data}\n return $http.post(url, params)\n\n service.listValues = (projectId, type) ->\n params = {\"project\": projectId}\n service.storeQueryParams(projectId, params)\n return $repo.queryMany(type, params)\n\n service.storeQueryParams = (projectId, params) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n $storage.set(hash, params)\n\n service.getQueryParams = (projectId) ->\n ns = \"#{projectId}:#{hashSuffix}\"\n hash = generateHash([projectId, ns])\n return $storage.get(hash) or {}\n\n service.storeShowTags = (projectId, showTags) ->\n hash = generateHash([projectId, 'showTags'])\n $storage.set(hash, showTags)\n\n service.getShowTags = (projectId) ->\n hash = generateHash([projectId, 'showTags'])\n return $storage.get(hash) or null\n\n return (instance) ->\n instance.userstories = service\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgUserstoriesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: webhooklogs.coffee\n###\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.list = (webhookId) ->\n params = {webhook: webhookId}\n return $repo.queryMany(\"webhooklogs\", params)\n\n service.resend = (webhooklogId) ->\n url = $urls.resolve(\"webhooklogs-resend\", webhooklogId)\n return $http.post(url)\n\n return (instance) ->\n instance.webhooklogs = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgWebhookLogsResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: webhooks.coffee\n###\n\nresourceProvider = ($repo, $urls, $http) ->\n service = {}\n\n service.list = (projectId) ->\n params = {project: projectId}\n return $repo.queryMany(\"webhooks\", params)\n\n service.test = (webhookId) ->\n url = $urls.resolve(\"webhooks-test\", webhookId)\n return $http.post(url)\n\n return (instance) ->\n instance.webhooks = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgWebhooksResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/resources/wikis.coffee\n###\n\n\ntaiga = @.taiga\n\nresourceProvider = ($repo, $http, $urls) ->\n service = {}\n\n service.get = (wikiId) ->\n return $repo.queryOne(\"wiki\", wikiId)\n\n service.getBySlug = (projectId, slug) ->\n return $repo.queryOne(\"wiki\", \"by_slug?project=#{projectId}&slug=#{slug}\")\n\n service.listLinks = (projectId) ->\n return $repo.queryMany(\"wiki-links\", {project: projectId})\n\n return (instance) ->\n instance.wiki = service\n\n\nmodule = angular.module(\"taigaResources\")\nmodule.factory(\"$tgWikiResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/main.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaUserSettings\")\n\n\n#############################################################################\n## User ChangePassword Controller\n#############################################################################\n\nclass UserChangePasswordController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAuth\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @auth, @translate) ->\n @scope.sectionName = @translate.instant(\"CHANGE_PASSWORD.SECTION_NAME\")\n @scope.user = @auth.getUser()\n\nmodule.controller(\"UserChangePasswordController\", UserChangePasswordController)\n\n\n#############################################################################\n## User ChangePassword Directive\n#############################################################################\n\nUserChangePasswordDirective = ($rs, $confirm, $loading, $translate) ->\n link = ($scope, $el, $attrs, ctrl) ->\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n if $scope.newPassword1 != $scope.newPassword2\n $confirm.notify('error', $translate.instant(\"CHANGE_PASSWORD.ERROR_PASSWORD_MATCH\"))\n return\n\n currentLoading = $loading()\n .target(submitButton)\n .start()\n\n promise = $rs.userSettings.changePassword($scope.currentPassword, $scope.newPassword1)\n promise.then =>\n currentLoading.finish()\n $confirm.notify('success')\n\n promise.then null, (response) =>\n currentLoading.finish()\n $confirm.notify('error', response.data._error_message)\n\n submitButton = $el.find(\".submit-button\")\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {\n link:link\n }\n\nmodule.directive(\"tgUserChangePassword\", [\"$tgResources\", \"$tgConfirm\", \"$tgLoading\", \"$translate\", UserChangePasswordDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/issues/lightboxes.coffee\n###\n\ntaiga = @.taiga\nbindOnce = @.taiga.bindOnce\ndebounce = @.taiga.debounce\n\nmodule = angular.module(\"taigaUserSettings\")\n\n\n#############################################################################\n## Delete User Lightbox Directive\n#############################################################################\n\nDeleteUserDirective = ($repo, $rootscope, $auth, $location, $navUrls, lightboxService) ->\n link = ($scope, $el, $attrs) ->\n $scope.$on \"deletelightbox:new\", (ctx, user)->\n lightboxService.open($el)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n submit = ->\n promise = $repo.remove($scope.user)\n\n promise.then (data) ->\n lightboxService.close($el)\n $auth.logout()\n $location.path($navUrls.resolve(\"login\"))\n\n # FIXME: error handling?\n promise.then null, ->\n console.log \"FAIL\"\n\n $el.on \"click\", \".button-red\", (event) ->\n event.preventDefault()\n lightboxService.close($el)\n\n $el.on \"click\", \".button-green\", debounce 2000, (event) ->\n event.preventDefault()\n submit()\n\n return {\n link: link,\n templateUrl: \"user/lightbox/lightbox-delete-account.html\"\n }\n\nmodule.directive(\"tgLbDeleteUser\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\",\n \"lightboxService\", DeleteUserDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/main.coffee\n###\n\ntaiga = @.taiga\nmixOf = @.taiga.mixOf\nsizeFormat = @.taiga.sizeFormat\nmodule = angular.module(\"taigaUserSettings\")\ndebounce = @.taiga.debounce\n\n#############################################################################\n## User settings Controller\n#############################################################################\n\nclass UserSettingsController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgConfig\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAuth\",\n \"$translate\"\n ]\n\n constructor: (@scope, @rootscope, @config, @repo, @confirm, @rs, @params, @q, @location, @navUrls,\n @auth, @translate) ->\n @scope.sectionName = \"USER_SETTINGS.MENU.SECTION_TITLE\"\n\n @scope.project = {}\n @scope.user = @auth.getUser()\n\n if !@scope.user\n @location.path(@navUrls.resolve(\"permission-denied\"))\n @location.replace()\n\n @scope.lang = @getLan()\n @scope.theme = @getTheme()\n\n maxFileSize = @config.get(\"maxUploadFileSize\", null)\n if maxFileSize\n text = @translate.instant(\"USER_SETTINGS.AVATAR_MAX_SIZE\", {\"maxFileSize\": sizeFormat(maxFileSize)})\n @scope.maxFileSizeMsg = text\n\n promise = @.loadInitialData()\n\n promise.then null, @.onInitialDataError.bind(@)\n\n loadInitialData: ->\n @scope.availableThemes = @config.get(\"themes\", [])\n\n return @rs.locales.list().then (locales) =>\n @scope.locales = locales\n return locales\n\n openDeleteLightbox: ->\n @rootscope.$broadcast(\"deletelightbox:new\", @scope.user)\n\n getLan: ->\n return @scope.user.lang ||\n @translate.preferredLanguage()\n\n getTheme: ->\n return @scope.user.theme ||\n @config.get(\"defaultTheme\") ||\n \"taiga\"\n\nmodule.controller(\"UserSettingsController\", UserSettingsController)\n\n\n#############################################################################\n## User Profile Directive\n#############################################################################\n\nUserProfileDirective = ($confirm, $auth, $repo, $translate) ->\n link = ($scope, $el, $attrs) ->\n submit = debounce 2000, (event) =>\n event.preventDefault()\n\n form = $el.find(\"form\").checksley()\n return if not form.validate()\n\n changeEmail = $scope.user.isAttributeModified(\"email\")\n $scope.user.lang = $scope.lang\n $scope.user.theme = $scope.theme\n\n onSuccess = (data) =>\n $auth.setUser(data)\n\n if changeEmail\n text = $translate.instant(\"USER_PROFILE.CHANGE_EMAIL_SUCCESS\")\n $confirm.success(text)\n else\n $confirm.notify('success')\n\n onError = (data) =>\n form.setErrors(data)\n $confirm.notify('error', data._error_message)\n\n $repo.save($scope.user).then(onSuccess, onError)\n\n $el.on \"submit\", \"form\", submit\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgUserProfile\", [\"$tgConfirm\", \"$tgAuth\", \"$tgRepo\", \"$translate\", UserProfileDirective])\n\n\n#############################################################################\n## User Avatar Directive\n#############################################################################\n\nUserAvatarDirective = ($auth, $model, $rs, $confirm) ->\n link = ($scope, $el, $attrs) ->\n showSizeInfo = ->\n $el.find(\".size-info\").removeClass(\"hidden\")\n\n onSuccess = (response) ->\n user = $model.make_model(\"users\", response.data)\n $auth.setUser(user)\n $scope.user = user\n\n $el.find('.overlay').addClass('hidden')\n $confirm.notify('success')\n\n onError = (response) ->\n showSizeInfo() if response.status == 413\n $el.find('.overlay').addClass('hidden')\n $confirm.notify('error', response.data._error_message)\n\n # Change photo\n $el.on \"click\", \".js-change-avatar\", ->\n $el.find(\"#avatar-field\").click()\n\n $el.on \"change\", \"#avatar-field\", (event) ->\n if $scope.avatarAttachment\n $el.find('.overlay').removeClass('hidden')\n $rs.userSettings.changeAvatar($scope.avatarAttachment).then(onSuccess, onError)\n\n # Use gravatar photo\n $el.on \"click\", \"a.use-gravatar\", (event) ->\n $el.find('.overlay').removeClass('hidden')\n $rs.userSettings.removeAvatar().then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgUserAvatar\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", UserAvatarDirective])\n\n\n#############################################################################\n## User Avatar Model Directive\n#############################################################################\n\nTaigaAvatarModelDirective = ($parse) ->\n link = ($scope, $el, $attrs) ->\n model = $parse($attrs.tgAvatarModel)\n modelSetter = model.assign\n\n $el.bind 'change', ->\n $scope.$apply ->\n modelSetter($scope, $el[0].files[0])\n\n return {link:link}\n\nmodule.directive('tgAvatarModel', ['$parse', TaigaAvatarModelDirective])\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/nav.coffee\n###\n\nUserSettingsNavigationDirective = ->\n link = ($scope, $el, $attrs) ->\n section = $attrs.tgUserSettingsNavigation\n $el.find(\".active\").removeClass(\"active\")\n $el.find(\"#usersettingsmenu-#{section} a\").addClass(\"active\")\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule = angular.module(\"taigaUserSettings\")\nmodule.directive(\"tgUserSettingsNavigation\", UserSettingsNavigationDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/user-settings/notifications.coffee\n###\n\ntaiga = @.taiga\nmixOf = @.taiga.mixOf\nbindOnce = @.taiga.bindOnce\n\nmodule = angular.module(\"taigaUserSettings\")\n\n\n#############################################################################\n## User settings Controller\n#############################################################################\n\nclass UserNotificationsController extends mixOf(taiga.Controller, taiga.PageMixin)\n @.$inject = [\n \"$scope\",\n \"$rootScope\",\n \"$tgRepo\",\n \"$tgConfirm\",\n \"$tgResources\",\n \"$routeParams\",\n \"$q\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"$tgAuth\"\n ]\n\n constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @auth) ->\n @scope.sectionName = \"USER_SETTINGS.NOTIFICATIONS.SECTION_NAME\"\n @scope.user = @auth.getUser()\n promise = @.loadInitialData()\n promise.then null, @.onInitialDataError.bind(@)\n\n loadInitialData: ->\n return @rs.notifyPolicies.list().then (notifyPolicies) =>\n @scope.notifyPolicies = notifyPolicies\n return notifyPolicies\n\nmodule.controller(\"UserNotificationsController\", UserNotificationsController)\n\n\n#############################################################################\n## User Notifications Directive\n#############################################################################\n\nUserNotificationsDirective = () ->\n link = ($scope, $el, $attrs) ->\n $scope.$on \"$destroy\", ->\n $el.off()\n\n return {link:link}\n\nmodule.directive(\"tgUserNotifications\", UserNotificationsDirective)\n\n\n#############################################################################\n## User Notifications List Directive\n#############################################################################\n\nUserNotificationsListDirective = ($repo, $confirm, $compile) ->\n template = _.template(\"\"\"\n <% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
\">\n
<%- notifyPolicy.project_name %>
\n
\n
\n \" id=\"policy-all-<%- notifyPolicy.id %>\"\n value=\"2\" <% if (notifyPolicy.notify_level == 2) { %>checked=\"checked\"<% } %>/>\n \n
\n
\n
\n
\n \" id=\"policy-involved-<%- notifyPolicy.id %>\"\n value=\"1\" <% if (notifyPolicy.notify_level == 1) { %>checked=\"checked\"<% } %> />\n \n
\n
\n
\n
\n \" id=\"policy-none-<%- notifyPolicy.id %>\"\n value=\"3\" <% if (notifyPolicy.notify_level == 3) { %>checked=\"checked\"<% } %> />\n \n
\n
\n
\n <% }) %>\n \"\"\")\n\n link = ($scope, $el, $attrs) ->\n render = ->\n $el.off()\n\n ctx = {notifyPolicies: $scope.notifyPolicies}\n html = template(ctx)\n\n $el.html($compile(html)($scope))\n\n $el.on \"change\", \"input[type=radio]\", (event) ->\n target = angular.element(event.currentTarget)\n\n policyIndex = target.parents(\".policy-table-row\").data('index')\n policy = $scope.notifyPolicies[policyIndex]\n prev_level = policy.notify_level\n policy.notify_level = parseInt(target.val(), 10)\n\n onSuccess = ->\n $confirm.notify(\"success\")\n\n onError = ->\n $confirm.notify(\"error\")\n target.parents(\".policy-table-row\")\n .find(\"input[value=#{prev_level}]\")\n .prop(\"checked\", true)\n\n $repo.save(policy).then(onSuccess, onError)\n\n $scope.$on \"$destroy\", ->\n $el.off()\n\n bindOnce($scope, $attrs.ngModel, render)\n\n return {link:link}\n\nmodule.directive(\"tgUserNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\",\n UserNotificationsListDirective])\n","###\n# Copyright (C) 2015 Taiga Agile LLC\n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: components.module.coffee\n###\n\nangular.module(\"taigaComponents\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-apps.module.coffee\n###\n\nmodule = angular.module(\"taigaExternalApps\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: home.module.coffee\n###\n\nmodule = angular.module(\"taigaHome\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: navigation-bar.module.coffee\n###\n\nangular.module(\"taigaNavigationBar\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile.module.coffee\n###\n\nmodule = angular.module(\"taigaProfile\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects.module.coffee\n###\n\nangular.module(\"taigaProjects\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: resources.module.coffee\n###\n\nangular.module(\"taigaResources2\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline.module.coffee\n###\n\nangular.module(\"taigaUserTimeline\", [])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: joy-ride.directive.coffee\n###\n\ntaiga = @.taiga\n\nJoyRideDirective = ($rootScope, currentUserService, joyRideService, $location) ->\n link = (scope, el, attrs, ctrl) ->\n unsuscribe = null\n intro = introJs()\n\n #Todo: translate\n intro.setOptions({\n exitOnEsc: false,\n exitOnOverlayClick: false,\n showStepNumbers: false,\n nextLabel: 'Next →',\n prevLabel: '← Back',\n skipLabel: 'Skip',\n doneLabel: 'Done',\n disableInteraction: true\n })\n\n intro.oncomplete () ->\n $('html,body').scrollTop(0)\n\n intro.onexit () ->\n currentUserService.disableJoyRide()\n\n initJoyrRide = (next, config) ->\n if !config[next.joyride]\n return\n\n intro.setOption('steps', joyRideService.get(next.joyride))\n intro.start()\n\n $rootScope.$on '$routeChangeSuccess', (event, next) ->\n if !next.joyride || !currentUserService.isAuthenticated()\n intro.exit()\n unsuscribe() if unsuscribe\n return\n\n\n intro.oncomplete () ->\n currentUserService.disableJoyRide(next.joyride)\n\n if next.loader\n unsuscribe = $rootScope.$on 'loader:end', () ->\n currentUserService.loadJoyRideConfig()\n .then (config) -> initJoyrRide(next, config)\n\n unsuscribe()\n else\n currentUserService.loadJoyRideConfig()\n .then (config) -> initJoyrRide(next, config)\n\n return {\n scope: {},\n link: link\n }\n\nJoyRideDirective.$inject = [\n \"$rootScope\",\n \"tgCurrentUserService\",\n \"tgJoyRideService\",\n \"$location\"\n]\n\nangular.module(\"taigaComponents\").directive(\"tgJoyRide\", JoyRideDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: joy-ride.service.coffee\n###\n\nclass JoyRideService extends taiga.Service\n @.$inject = [\n '$translate',\n 'tgCheckPermissionsService'\n ]\n\n constructor: (@translate, @checkPermissionsService) ->\n\n getConfig: () ->\n return {\n dashboard: () =>\n steps = [\n {\n element: '.project-list > section:not(.ng-hide)',\n position: 'left',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TITLE'),\n text: @translate.instant('JOYRIDE.DASHBOARD.STEP1.TEXT')\n }\n },\n {\n element: '.working-on-container',\n position: 'right',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TITLE'),\n text: @translate.instant('JOYRIDE.DASHBOARD.STEP2.TEXT')\n }\n },\n {\n element: '.watching-container',\n position: 'right',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP3.TITLE')\n text: [\n @translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT1'),\n @translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT2')\n ]\n }\n }\n ]\n\n if !$('.project-list .create-project-button').is(':hidden')\n steps.push({\n element: '.project-list .create-project-button',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.DASHBOARD.STEP4.TITLE')\n text: [\n @translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT1'),\n @translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT2')\n ]\n }\n })\n\n return steps\n\n backlog: () =>\n steps = [\n {\n element: '.summary',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP1.TITLE')\n text: [\n @translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT1'),\n @translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT2')\n ]\n }\n },\n {\n element: '.backlog-table-empty',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP2.TITLE')\n text: @translate.instant('JOYRIDE.BACKLOG.STEP2.TEXT')\n }\n },\n {\n element: '.sprints',\n position: 'left',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP3.TITLE')\n text: @translate.instant('JOYRIDE.BACKLOG.STEP3.TEXT')\n }\n }\n ]\n\n if @checkPermissionsService.check('add_us')\n steps.push({\n element: '.new-us',\n position: 'rigth',\n joyride: {\n title: @translate.instant('JOYRIDE.BACKLOG.STEP4.TITLE')\n text: @translate.instant('JOYRIDE.BACKLOG.STEP4.TEXT')\n }\n })\n\n return steps\n\n kanban: () =>\n steps = [\n {\n element: '.kanban-table-inner',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.KANBAN.STEP1.TITLE')\n text: @translate.instant('JOYRIDE.KANBAN.STEP1.TEXT')\n }\n },\n {\n element: '.card-placeholder',\n position: 'right',\n joyride: {\n title: @translate.instant('JOYRIDE.KANBAN.STEP2.TITLE')\n text: @translate.instant('JOYRIDE.KANBAN.STEP2.TEXT')\n }\n }\n ]\n\n if @checkPermissionsService.check('add_us')\n steps.push({\n element: '.icon-plus',\n position: 'bottom',\n joyride: {\n title: @translate.instant('JOYRIDE.KANBAN.STEP3.TITLE')\n text: [\n @translate.instant('JOYRIDE.KANBAN.STEP3.TEXT1'),\n @translate.instant('JOYRIDE.KANBAN.STEP3.TEXT2'),\n ]\n }\n })\n\n return steps\n }\n\n get: (name) ->\n joyRides = @.getConfig()\n joyRide = joyRides[name].call(this)\n\n return _.map joyRide, (item) ->\n html = \"\"\n\n if item.joyride.title\n html += \"

#{item.joyride.title}

\"\n\n if _.isArray(item.joyride.text)\n _.forEach item.joyride.text, (text) ->\n html += \"

#{text}

\"\n else\n html += \"

#{item.joyride.text}

\"\n\n item.intro = html\n\n return item\n\nangular.module(\"taigaComponents\").service(\"tgJoyRideService\", JoyRideService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project-menu.controller.coffee\n###\n\nclass ProjectMenuController\n @.$inject = [\n \"tgProjectService\",\n \"tgLightboxFactory\"\n ]\n\n constructor: (@projectService, @lightboxFactory) ->\n @.project = null\n @.menu = Immutable.Map()\n\n show: () ->\n @.project = @projectService.project\n\n @.active = @._getActiveSection()\n\n @._setVideoConference()\n @._setMenuPermissions()\n\n hide: () ->\n @.project = null\n @.menu = {}\n\n search: () ->\n @lightboxFactory.create(\"tg-search-box\", {\n \"class\": \"lightbox lightbox-search\"\n })\n\n _setVideoConference: () ->\n videoconferenceUrl = @._videoConferenceUrl()\n\n if videoconferenceUrl\n @.project = @.project.set(\"videoconferenceUrl\", videoconferenceUrl)\n\n _setMenuPermissions: () ->\n @.menu = Immutable.Map({\n backlog: false,\n kanban: false,\n issues: false,\n wiki: false\n })\n\n if @.project.get(\"is_backlog_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_us\") != -1\n @.menu = @.menu.set(\"backlog\", true)\n\n if @.project.get(\"is_kanban_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_us\") != -1\n @.menu = @.menu.set(\"kanban\", true)\n\n if @.project.get(\"is_issues_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_issues\") != -1\n @.menu = @.menu.set(\"issues\", true)\n\n if @.project.get(\"is_wiki_activated\") && @.project.get(\"my_permissions\").indexOf(\"view_wiki_pages\") != -1\n @.menu = @.menu.set(\"wiki\", true)\n\n _getActiveSection: () ->\n sectionName = @projectService.section\n sectionsBreadcrumb = @projectService.sectionsBreadcrumb\n\n indexBacklog = sectionsBreadcrumb.lastIndexOf(\"backlog\")\n indexKanban = sectionsBreadcrumb.lastIndexOf(\"kanban\")\n\n if indexBacklog != -1 || indexKanban != -1\n if indexKanban == -1 || indexBacklog < indexKanban\n oldSectionName = \"backlog\"\n else\n oldSectionName = \"kanban\"\n\n if sectionName == \"backlog-kanban\"\n if oldSectionName in [\"backlog\", \"kanban\"]\n sectionName = oldSectionName\n else if @.project.get(\"is_backlog_activated\") && !@.project.get(\"is_kanban_activated\")\n sectionName = \"backlog\"\n else if !@.project.get(\"is_backlog_activated\") && @.project.get(\"is_kanban_activated\")\n sectionName = \"kanban\"\n\n return sectionName\n\n _videoConferenceUrl: () ->\n if @.project.get(\"videoconferences\") == \"appear-in\"\n baseUrl = \"https://appear.in/\"\n else if @.project.get(\"videoconferences\") == \"talky\"\n baseUrl = \"https://talky.io/\"\n else if @.project.get(\"videoconferences\") == \"jitsi\"\n baseUrl = \"https://meet.jit.si/\"\n url = @.project.get(\"slug\") + \"-\" + taiga.slugify(@.project.get(\"videoconferences_extra_data\"))\n url = url.replace(/-/g, \"\")\n return baseUrl + url\n else if @.project.get(\"videoconferences\") == \"custom\"\n return @.project.get(\"videoconferences_extra_data\")\n else\n return \"\"\n\n if @.project.get(\"videoconferences_extra_data\")\n url = @.project.get(\"slug\") + \"-\" + @.project.get(\"videoconferences_extra_data\")\n else\n url = @.project.get(\"slug\")\n\n return baseUrl + url\n\nangular.module(\"taigaComponents\").controller(\"ProjectMenu\", ProjectMenuController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project-menu.directive.coffee\n###\n\ntaiga = @.taiga\n\nProjectMenuDirective = (projectService, lightboxFactory) ->\n link = (scope, el, attrs, ctrl) ->\n projectChange = () ->\n if projectService.project\n ctrl.show()\n else\n ctrl.hide()\n\n scope.$watch ( () ->\n return projectService.project\n ), projectChange\n\n return {\n scope: {},\n controller: \"ProjectMenu\",\n controllerAs: \"vm\",\n templateUrl: \"components/project-menu/project-menu.html\",\n link: link\n }\n\nProjectMenuDirective.$inject = [\n \"tgProjectService\",\n \"tgLightboxFactory\"\n]\n\nangular.module(\"taigaComponents\").directive(\"tgProjectMenu\", ProjectMenuDirective)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee\n###\n\n\nTermsOfServiceAndPrivacyPolicyNoticeDirective = ($config) ->\n link = (scope, el, attrs) ->\n scope.privacyPolicyUrl = $config.get(\"privacyPolicyUrl\")\n scope.termsOfServiceUrl = $config.get(\"termsOfServiceUrl\")\n\n return {\n restrict: \"AE\",\n scope: {},\n link: link,\n templateUrl: \"components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html\"\n }\n\nangular.module(\"taigaComponents\")\n .directive(\"tgTermsOfServiceAndPrivacyPolicyNotice\", [\n \"$tgConfig\",\n TermsOfServiceAndPrivacyPolicyNoticeDirective\n ])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: vote-button.controller.coffee\n###\n\nclass VoteButtonController\n @.$inject = [\n \"tgCurrentUserService\",\n ]\n\n constructor: (@currentUserService) ->\n @.user = @currentUserService.getUser()\n @.isMouseOver = false\n @.loading = false\n\n showTextWhenMouseIsOver: ->\n @.isMouseOver = true\n\n showTextWhenMouseIsLeave: ->\n @.isMouseOver = false\n\n toggleVote: ->\n @.loading = true\n\n if not @.item.is_voter\n promise = @._upvote()\n else\n promise = @._downvote()\n\n promise.finally () => @.loading = false\n\n return promise\n\n _upvote: ->\n @.onUpvote().then =>\n @.showTextWhenMouseIsLeave()\n\n _downvote: ->\n @.onDownvote()\n\nangular.module(\"taigaComponents\").controller(\"VoteButton\", VoteButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: vote-button.directive.coffee\n###\n\nVoteButtonDirective = ->\n return {\n scope: {}\n controller: \"VoteButton\",\n bindToController: {\n item: \"=\",\n onUpvote: \"=\",\n onDownvote: \"=\"\n }\n controllerAs: \"vm\",\n templateUrl: \"components/vote-button/vote-button.html\",\n }\n\nangular.module(\"taigaComponents\").directive(\"tgVoteButton\", VoteButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-button.controller.coffee\n###\n\nclass WatchButtonController\n @.$inject = [\n \"tgCurrentUserService\",\n ]\n\n constructor: (@currentUserService) ->\n @.user = @currentUserService.getUser()\n @.isMouseOver = false\n @.loading = false\n\n showTextWhenMouseIsOver: ->\n @.isMouseOver = true\n\n showTextWhenMouseIsLeave: ->\n @.isMouseOver = false\n\n toggleWatch: ->\n @.loading = true\n\n if not @.item.is_watcher\n promise = @._watch()\n else\n promise = @._unwatch()\n\n promise.finally () => @.loading = false\n\n return promise\n\n _watch: ->\n @.onWatch().then =>\n @.showTextWhenMouseIsLeave()\n\n _unwatch: ->\n @.onUnwatch()\n\nangular.module(\"taigaComponents\").controller(\"WatchButton\", WatchButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-button.directive.coffee\n###\n\nWatchButtonDirective = ->\n return {\n scope: {}\n controller: \"WatchButton\",\n bindToController: {\n item: \"=\",\n onWatch: \"=\",\n onUnwatch: \"=\"\n }\n controllerAs: \"vm\",\n templateUrl: \"components/watch-button/watch-button.html\",\n }\n\nangular.module(\"taigaComponents\").directive(\"tgWatchButton\", WatchButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-app.controller.coffee\n###\n\ntaiga = @.taiga\n\nclass ExternalAppController extends taiga.Controller\n @.$inject = [\n \"$routeParams\",\n \"tgExternalAppsService\",\n \"$window\",\n \"tgCurrentUserService\",\n \"$location\",\n \"$tgNavUrls\",\n \"tgXhrErrorService\",\n \"tgLoader\"\n ]\n\n constructor: (@routeParams, @externalAppsService, @window, @currentUserService, @location,\n @navUrls, @xhrError, @loader) ->\n @loader.start(false)\n @._applicationId = @routeParams.application\n @._state = @routeParams.state\n @._getApplicationToken()\n @._user = @currentUserService.getUser()\n @._application = null\n nextUrl = encodeURIComponent(@location.url())\n loginUrl = @navUrls.resolve(\"login\")\n @.loginWithAnotherUserUrl = \"#{loginUrl}?next=#{nextUrl}\"\n\n taiga.defineImmutableProperty @, \"user\", () => @._user\n taiga.defineImmutableProperty @, \"application\", () => @._application\n\n _redirect: (applicationToken) =>\n nextUrl = applicationToken.get(\"next_url\")\n @window.open(nextUrl, \"_self\")\n\n _getApplicationToken: =>\n return @externalAppsService.getApplicationToken(@._applicationId, @._state)\n .then (data) =>\n @._application = data.get(\"application\")\n if data.get(\"auth_code\")\n @._redirect(data)\n else\n @loader.pageLoaded()\n\n .catch (xhr) =>\n @loader.pageLoaded()\n return @xhrError.response(xhr)\n\n cancel: () ->\n @window.history.back()\n\n createApplicationToken: =>\n return @externalAppsService.authorizeApplicationToken(@._applicationId, @._state)\n .then (data) =>\n @._redirect(data)\n .catch (xhr) =>\n return @xhrError.response(xhr)\n\n\nangular.module(\"taigaExternalApps\").controller(\"ExternalApp\", ExternalAppController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-app.service.coffee\n###\n\nclass ExternalAppsService extends taiga.Service\n @.$inject = [\n \"tgResources\"\n ]\n\n constructor: (@rs) ->\n\n getApplicationToken: (applicationId, state) ->\n return @rs.externalapps.getApplicationToken(applicationId, state)\n\n authorizeApplicationToken: (applicationId, state) ->\n return @rs.externalapps.authorizeApplicationToken(applicationId, state)\n\nangular.module(\"taigaExternalApps\").service(\"tgExternalAppsService\", ExternalAppsService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: feedback.service.coffee\n###\n\nclass FeedbackService extends taiga.Service\n @.$inject = [\"tgLightboxFactory\"]\n\n constructor: (@lightboxFactory) ->\n\n sendFeedback: ->\n @lightboxFactory.create(\"tg-lb-feedback\", {\n \"class\": \"lightbox lightbox-feedback lightbox-generic-form\"\n })\n\nangular.module(\"taigaFeedback\").service(\"tgFeedbackService\", FeedbackService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: duty.directive.coffee\n###\n\nDutyDirective = (navurls, $translate) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n scope.vm.duty = scope.duty\n\n scope.vm.getDutyType = () ->\n if scope.vm.duty\n if scope.vm.duty.get('_name') == \"userstories\"\n return $translate.instant(\"COMMON.USER_STORY\")\n if scope.vm.duty.get('_name') == \"tasks\"\n return $translate.instant(\"COMMON.TASK\")\n if scope.vm.duty.get('_name') == \"issues\"\n return $translate.instant(\"COMMON.ISSUE\")\n\n return {\n templateUrl: \"home/duties/duty.html\"\n scope: {\n \"duty\": \"=tgDuty\"\n }\n link: link\n }\n\nDutyDirective.$inject = [\n \"$tgNavUrls\",\n \"$translate\"\n]\n\nangular.module(\"taigaHome\").directive(\"tgDuty\", DutyDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: home.service.coffee\n###\n\ngroupBy = @.taiga.groupBy\n\nclass HomeService extends taiga.Service\n @.$inject = [\n \"$tgNavUrls\",\n \"tgResources\",\n \"tgProjectsService\"\n ]\n\n constructor: (@navurls, @rs, @projectsService) ->\n\n _attachProjectInfoToWorkInProgress: (workInProgress, projectsById) ->\n _attachProjectInfoToDuty = (duty, objType) =>\n project = projectsById.get(String(duty.get('project')))\n\n ctx = {\n project: project.get('slug')\n ref: duty.get('ref')\n }\n\n url = @navurls.resolve(\"project-#{objType}-detail\", ctx)\n\n duty = duty.set('url', url)\n duty = duty.set('projectName', project.get('name'))\n duty = duty.set(\"_name\", objType)\n\n return duty\n\n assignedTo = workInProgress.get(\"assignedTo\")\n\n if assignedTo.get(\"userStories\")\n _duties = assignedTo.get(\"userStories\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"userstories\")\n\n assignedTo = assignedTo.set(\"userStories\", _duties)\n\n if assignedTo.get(\"tasks\")\n _duties = assignedTo.get(\"tasks\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"tasks\")\n\n assignedTo = assignedTo.set(\"tasks\", _duties)\n\n if assignedTo.get(\"issues\")\n _duties = assignedTo.get(\"issues\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"issues\")\n\n assignedTo = assignedTo.set(\"issues\", _duties)\n\n watching = workInProgress.get(\"watching\")\n\n if watching.get(\"userStories\")\n _duties = watching.get(\"userStories\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"userstories\")\n\n watching = watching.set(\"userStories\", _duties)\n\n if watching.get(\"tasks\")\n _duties = watching.get(\"tasks\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"tasks\")\n\n watching = watching.set(\"tasks\", _duties)\n\n if watching.get(\"issues\")\n _duties = watching.get(\"issues\").map (duty) ->\n return _attachProjectInfoToDuty(duty, \"issues\")\n\n watching = watching.set(\"issues\", _duties)\n\n\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo)\n workInProgress = workInProgress.set(\"watching\", watching)\n\n\n getWorkInProgress: (userId) ->\n projectsById = Immutable.Map()\n\n projectsPromise = @projectsService.getProjectsByUserId(userId).then (projects) ->\n projectsById = Immutable.fromJS(groupBy(projects.toJS(), (p) -> p.id))\n\n assignedTo = Immutable.Map()\n\n params = {\n status__is_closed: false\n assigned_to: userId\n }\n\n params_us = {\n is_closed: false\n assigned_to: userId\n }\n\n assignedUserStoriesPromise = @rs.userstories.listInAllProjects(params_us).then (userstories) ->\n assignedTo = assignedTo.set(\"userStories\", userstories)\n\n assignedTasksPromise = @rs.tasks.listInAllProjects(params).then (tasks) ->\n assignedTo = assignedTo.set(\"tasks\", tasks)\n\n assignedIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) ->\n assignedTo = assignedTo.set(\"issues\", issues)\n\n params = {\n status__is_closed: false\n watchers: userId\n }\n\n params_us = {\n is_closed: false\n watchers: userId\n }\n\n watching = Immutable.Map()\n\n watchingUserStoriesPromise = @rs.userstories.listInAllProjects(params_us).then (userstories) ->\n watching = watching.set(\"userStories\", userstories)\n\n watchingTasksPromise = @rs.tasks.listInAllProjects(params).then (tasks) ->\n watching = watching.set(\"tasks\", tasks)\n\n watchingIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) ->\n watching = watching.set(\"issues\", issues)\n\n workInProgress = Immutable.Map()\n\n Promise.all([\n projectsPromise\n assignedUserStoriesPromise,\n assignedTasksPromise,\n assignedIssuesPromise,\n watchingUserStoriesPromise,\n watchingTasksPromise,\n watchingIssuesPromise\n ]).then =>\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo)\n workInProgress = workInProgress.set(\"watching\", watching)\n\n workInProgress = @._attachProjectInfoToWorkInProgress(workInProgress, projectsById)\n\n return workInProgress\n\nangular.module(\"taigaHome\").service(\"tgHomeService\", HomeService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: home-project-list.directive.coffee\n###\n\nHomeProjectListDirective = (currentUserService, projectsService) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n\n taiga.defineImmutableProperty(scope.vm, \"projects\", () -> currentUserService.projects.get(\"recents\"))\n\n scope.vm.newProject = ->\n projectsService.newProject()\n\n directive = {\n templateUrl: \"home/projects/home-project-list.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nHomeProjectListDirective.$inject = [\n \"tgCurrentUserService\",\n \"tgProjectsService\"\n]\n\nangular.module(\"taigaHome\").directive(\"tgHomeProjectList\", HomeProjectListDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: working-on.controller.coffee\n###\n\nclass WorkingOnController\n @.$inject = [\n \"tgHomeService\"\n ]\n\n constructor: (@homeService) ->\n @.assignedTo = Immutable.Map()\n @.watching = Immutable.Map()\n\n _setAssignedTo: (workInProgress) ->\n userStories = workInProgress.get(\"assignedTo\").get(\"userStories\")\n tasks = workInProgress.get(\"assignedTo\").get(\"tasks\")\n issues = workInProgress.get(\"assignedTo\").get(\"issues\")\n\n @.assignedTo = userStories.concat(tasks).concat(issues)\n if @.assignedTo.size > 0\n @.assignedTo = @.assignedTo.sortBy((elem) -> elem.get(\"modified_date\")).reverse()\n\n _setWatching: (workInProgress) ->\n userStories = workInProgress.get(\"watching\").get(\"userStories\")\n tasks = workInProgress.get(\"watching\").get(\"tasks\")\n issues = workInProgress.get(\"watching\").get(\"issues\")\n\n @.watching = userStories.concat(tasks).concat(issues)\n if @.watching.size > 0\n @.watching = @.watching.sortBy((elem) -> elem.get(\"modified_date\")).reverse()\n\n getWorkInProgress: (userId) ->\n return @homeService.getWorkInProgress(userId).then (workInProgress) =>\n @._setAssignedTo(workInProgress)\n @._setWatching(workInProgress)\n\nangular.module(\"taigaHome\").controller(\"WorkingOn\", WorkingOnController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: working-on.directive.coffee\n###\n\nWorkingOnDirective = (homeService, currentUserService) ->\n link = (scope, el, attrs, ctrl) ->\n user = currentUserService.getUser()\n # If we are not logged in the user will be null\n if user\n userId = user.get(\"id\")\n ctrl.getWorkInProgress(userId)\n\n return {\n controller: \"WorkingOn\",\n controllerAs: \"vm\",\n templateUrl: \"home/working-on/working-on.html\",\n scope: {},\n link: link\n }\n\nWorkingOnDirective.$inject = [\n \"tgHomeService\",\n \"tgCurrentUserService\"\n]\n\nangular.module(\"taigaHome\").directive(\"tgWorkingOn\", WorkingOnDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: dropdown-project-list.directive.coffee\n###\n\nDropdownProjectListDirective = (currentUserService, projectsService) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n\n taiga.defineImmutableProperty(scope.vm, \"projects\", () -> currentUserService.projects.get(\"recents\"))\n\n scope.vm.newProject = ->\n projectsService.newProject()\n\n directive = {\n templateUrl: \"navigation-bar/dropdown-project-list/dropdown-project-list.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nDropdownProjectListDirective.$inject = [\n \"tgCurrentUserService\",\n \"tgProjectsService\"\n]\n\nangular.module(\"taigaNavigationBar\").directive(\"tgDropdownProjectList\", DropdownProjectListDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: dropdown-user.directive.coffee\n###\n\nDropdownUserDirective = (authService, configService, locationService,\n navUrlsService, feedbackService) ->\n\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n scope.vm.isFeedbackEnabled = configService.get(\"feedbackEnabled\")\n taiga.defineImmutableProperty(scope.vm, \"user\", () -> authService.userData)\n\n scope.vm.logout = ->\n authService.logout()\n locationService.path(navUrlsService.resolve(\"login\"))\n\n scope.vm.sendFeedback = ->\n feedbackService.sendFeedback()\n\n directive = {\n templateUrl: \"navigation-bar/dropdown-user/dropdown-user.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nDropdownUserDirective.$inject = [\n \"$tgAuth\",\n \"$tgConfig\",\n \"$tgLocation\",\n \"$tgNavUrls\",\n \"tgFeedbackService\"\n]\n\nangular.module(\"taigaNavigationBar\").directive(\"tgDropdownUser\", DropdownUserDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: navigation-bar.directive.coffee\n###\n\nNavigationBarDirective = (currentUserService, navigationBarService, $location) ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {}\n\n scope.$on \"$routeChangeSuccess\", () ->\n if $location.path() == \"/\"\n scope.vm.active = true\n else\n scope.vm.active = false\n\n taiga.defineImmutableProperty(scope.vm, \"projects\", () -> currentUserService.projects.get(\"recents\"))\n taiga.defineImmutableProperty(scope.vm, \"isAuthenticated\", () -> currentUserService.isAuthenticated())\n taiga.defineImmutableProperty(scope.vm, \"isEnabledHeader\", () -> navigationBarService.isEnabledHeader())\n\n\n directive = {\n templateUrl: \"navigation-bar/navigation-bar.html\"\n scope: {}\n link: link\n }\n\n return directive\n\nNavigationBarDirective.$inject = [\n \"tgCurrentUserService\",\n \"tgNavigationBarService\"\n \"$location\"\n]\n\nangular.module(\"taigaNavigationBar\").directive(\"tgNavigationBar\", NavigationBarDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: navigation-bar.service.coffee\n###\n\nclass NavigationBarService extends taiga.Service\n\n constructor: ->\n @.disableHeader()\n\n enableHeader: ->\n @.enabledHeader = true\n\n disableHeader: ->\n @.enabledHeader = false\n\n isEnabledHeader: ->\n return @.enabledHeader\n\nangular.module(\"taigaNavigationBar\").service(\"tgNavigationBarService\", NavigationBarService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-bar.controller.coffee\n###\n\nclass ProfileBarController\n @.$inject = [\n \"tgUserService\"\n ]\n\n constructor: (@userService) ->\n @.loadStats()\n\n loadStats: () ->\n return @userService.getStats(@.user.get(\"id\")).then (stats) =>\n @.stats = stats\n\nangular.module(\"taigaProfile\").controller(\"ProfileBar\", ProfileBarController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-bar.directive.coffee\n###\n\nProfileBarDirective = () ->\n return {\n templateUrl: \"profile/profile-bar/profile-bar.html\",\n controller: \"ProfileBar\",\n controllerAs: \"vm\",\n scope: {\n user: \"=user\",\n isCurrentUser: \"=iscurrentuser\"\n },\n bindToController: true\n }\n\n\nangular.module(\"taigaProfile\").directive(\"tgProfileBar\", ProfileBarDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-contacts.controller.coffee\n###\n\nclass ProfileContactsController\n @.$inject = [\n \"tgUserService\",\n \"tgCurrentUserService\"\n ]\n\n constructor: (@userService, @currentUserService) ->\n @.currentUser = @currentUserService.getUser()\n\n @.isCurrentUser = false\n\n if @.currentUser && @.currentUser.get(\"id\") == @.user.get(\"id\")\n @.isCurrentUser = true\n\n loadContacts: () ->\n @userService.getContacts(@.user.get(\"id\"))\n .then (contacts) =>\n @.contacts = contacts\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileContacts\", ProfileContactsController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-contacts.directive.coffee\n###\n\nProfileContactsDirective = () ->\n link = (scope, elm, attrs, ctrl) ->\n ctrl.loadContacts()\n\n return {\n templateUrl: \"profile/profile-contacts/profile-contacts.html\",\n scope: {\n user: \"=\"\n },\n controllerAs: \"vm\",\n controller: \"ProfileContacts\",\n link: link,\n bindToController: true\n }\n\nangular.module(\"taigaProfile\").directive(\"tgProfileContacts\", ProfileContactsDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: items.directive.coffee\n###\n\nFavItemDirective = ->\n link = (scope, el, attrs, ctrl) ->\n scope.vm = {item: scope.item}\n\n templateUrl = (el, attrs) ->\n if attrs.itemType == \"project\"\n return \"profile/profile-favs/items/project.html\"\n else # if attr.itemType in [\"userstory\", \"task\", \"issue\"]\n return \"profile/profile-favs/items/ticket.html\"\n\n return {\n scope: {\n \"item\": \"=tgFavItem\"\n }\n link: link\n templateUrl: templateUrl\n }\n\n\nangular.module(\"taigaProfile\").directive(\"tgFavItem\", FavItemDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-favs.controller.coffee\n###\n\ndebounceLeading = @.taiga.debounceLeading\n\nclass FavsBaseController\n constructor: ->\n @._init()\n\n #@._getItems = null # Define in inheritance classes\n #\n _init: ->\n @.enableFilterByAll = true\n @.enableFilterByProjects = true\n @.enableFilterByUserStories = true\n @.enableFilterByTasks = true\n @.enableFilterByIssues = true\n @.enableFilterByTextQuery = true\n\n @._resetList()\n @.q = null\n @.type = null\n\n _resetList: ->\n @.items = Immutable.List()\n @.scrollDisabled = false\n @._page = 1\n\n _enableLoadingSpinner: ->\n @.isLoading = true\n\n _disableLoadingSpinner: ->\n @.isLoading = false\n\n _enableScroll : ->\n @.scrollDisabled = false\n\n _disableScroll : ->\n @.scrollDisabled = true\n\n _checkIfHasMorePages: (hasNext) ->\n if hasNext\n @._page += 1\n @._enableScroll()\n else\n @._disableScroll()\n\n _checkIfHasNoResults: ->\n @.hasNoResults = @.items.size == 0\n\n loadItems: ->\n @._enableLoadingSpinner()\n @._disableScroll()\n\n @._getItems(@.user.get(\"id\"), @._page, @.type, @.q)\n .then (response) =>\n @.items = @.items.concat(response.get(\"data\"))\n\n @._checkIfHasMorePages(response.get(\"next\"))\n @._checkIfHasNoResults()\n @._disableLoadingSpinner()\n\n return @.items\n .catch =>\n @._disableLoadingSpinner()\n\n return @.items\n\n ################################################\n ## Filtre actions\n ################################################\n filterByTextQuery: debounceLeading 500, ->\n @._resetList()\n @.loadItems()\n\n showAll: ->\n if @.type isnt null\n @.type = null\n @._resetList()\n @.loadItems()\n\n showProjectsOnly: ->\n if @.type isnt \"project\"\n @.type = \"project\"\n @._resetList()\n @.loadItems()\n\n showUserStoriesOnly: ->\n if @.type isnt \"userstory\"\n @.type = \"userstory\"\n @._resetList()\n @.loadItems()\n\n showTasksOnly: ->\n if @.type isnt \"task\"\n @.type = \"task\"\n @._resetList()\n @.loadItems()\n\n showIssuesOnly: ->\n if @.type isnt \"issue\"\n @.type = \"issue\"\n @._resetList()\n @.loadItems()\n\n\n####################################################\n## Liked\n####################################################\n\nclass ProfileLikedController extends FavsBaseController\n @.$inject = [\n \"tgUserService\",\n ]\n\n constructor: (@userService) ->\n super()\n @.enableFilterByAll = false\n @.enableFilterByProjects = false\n @.enableFilterByUserStories = false\n @.enableFilterByTasks = false\n @.enableFilterByIssues = false\n @.enableFilterByTextQuery = true\n @._getItems = @userService.getLiked\n\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileLiked\", ProfileLikedController)\n\n####################################################\n## Voted\n####################################################\n\nclass ProfileVotedController extends FavsBaseController\n @.$inject = [\n \"tgUserService\",\n ]\n\n constructor: (@userService) ->\n super()\n @.enableFilterByAll = true\n @.enableFilterByProjects = false\n @.enableFilterByUserStories = true\n @.enableFilterByTasks = true\n @.enableFilterByIssues = true\n @.enableFilterByTextQuery = true\n @._getItems = @userService.getVoted\n\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileVoted\", ProfileVotedController)\n\n\n\n####################################################\n## Watched\n####################################################\n\nclass ProfileWatchedController extends FavsBaseController\n @.$inject = [\n \"tgUserService\",\n ]\n\n constructor: (@userService) ->\n super()\n @._getItems = @userService.getWatched\n\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileWatched\", ProfileWatchedController)\n\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-favs.directive.coffee\n###\n\nbase = {\n scope: {},\n bindToController: {\n user: \"=\"\n type: \"@\"\n q: \"@\"\n scrollDisabled: \"@\"\n isLoading: \"@\"\n hasNoResults: \"@\"\n }\n controller: null, # Define in directives\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-favs/profile-favs.html\",\n}\n\n\n####################################################\n## Liked\n####################################################\n\nProfileLikedDirective = () ->\n return _.extend({}, base, {\n controller: \"ProfileLiked\"\n })\n\nangular.module(\"taigaProfile\").directive(\"tgProfileLiked\", ProfileLikedDirective)\n\n\n####################################################\n## Voted\n####################################################\n\nProfileVotedDirective = () ->\n return _.extend({}, base, {\n controller: \"ProfileVoted\"\n })\n\nangular.module(\"taigaProfile\").directive(\"tgProfileVoted\", ProfileVotedDirective)\n\n\n####################################################\n## Watched\n####################################################\n\nProfileWatchedDirective = () ->\n return _.extend({}, base, {\n controller: \"ProfileWatched\"\n })\n\nangular.module(\"taigaProfile\").directive(\"tgProfileWatched\", ProfileWatchedDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-hints.controller.coffee\n###\n\nclass ProfileHints\n HINTS: [\n { #hint1\n url: \"https://taiga.io/support/import-export-projects/\"\n },\n { #hint2\n url: \"https://taiga.io/support/custom-fields/\"\n },\n { #hint3\n },\n { #hint4\n }\n ]\n constructor: (@translate) ->\n hintKey = Math.floor(Math.random() * @.HINTS.length) + 1\n\n @.hint = @.HINTS[hintKey - 1]\n\n @.hint.linkText = @.hint.linkText || 'HINTS.LINK'\n\n @.hint.title = @translate.instant(\"HINTS.HINT#{hintKey}_TITLE\")\n\n @.hint.text = @translate.instant(\"HINTS.HINT#{hintKey}_TEXT\")\n\nProfileHints.$inject = [\n \"$translate\"\n]\n\nangular.module(\"taigaProfile\").controller(\"ProfileHints\", ProfileHints)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-hints.directive.coffee\n###\n\nProfileHints = ($translate) ->\n return {\n scope: {},\n controller: \"ProfileHints\",\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-hints/profile-hints.html\"\n }\n\nProfileHints.$inject = [\n \"$translate\"\n]\n\nangular.module(\"taigaProfile\").directive(\"tgProfileHints\", ProfileHints)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-projects.controller.coffee\n###\n\nclass ProfileProjectsController\n @.$inject = [\n \"tgProjectsService\",\n \"tgUserService\"\n ]\n\n constructor: (@projectsService, @userService) ->\n\n loadProjects: () ->\n @projectsService.getProjectsByUserId(@.user.get(\"id\"))\n .then (projects) =>\n return @userService.attachUserContactsToProjects(@.user.get(\"id\"), projects)\n .then (projects) =>\n @.projects = projects\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileProjects\", ProfileProjectsController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-projects.directive.coffee\n###\n\nProfileProjectsDirective = () ->\n link = (scope, elm, attr, ctrl) ->\n ctrl.loadProjects()\n\n return {\n templateUrl: \"profile/profile-projects/profile-projects.html\",\n scope: {\n user: \"=\"\n },\n link: link\n bindToController: true,\n controllerAs: \"vm\",\n controller: \"ProfileProjects\"\n }\n\nangular.module(\"taigaProfile\").directive(\"tgProfileProjects\", ProfileProjectsDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-tab.directive.coffee\n###\n\nProfileTabDirective = () ->\n link = (scope, element, attrs, ctrl, transclude) ->\n scope.tab = {}\n\n attrs.$observe \"tgProfileTab\", (name) ->\n scope.tab.name = name\n\n attrs.$observe \"tabTitle\", (title) ->\n scope.tab.title = title\n\n scope.tab.icon = attrs.tabIcon\n scope.tab.active = !!attrs.tabActive\n\n if scope.$eval(attrs.tabDisabled) != true\n ctrl.addTab(scope.tab)\n\n return {\n templateUrl: \"profile/profile-tab/profile-tab.html\",\n scope: {},\n require: \"^tgProfileTabs\",\n link: link,\n transclude: true\n }\n\nangular.module(\"taigaProfile\")\n .directive(\"tgProfileTab\", ProfileTabDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-tabs.controller.coffee\n###\n\nclass ProfileTabsController\n constructor: () ->\n @tabs = []\n\n addTab: (tab) ->\n @tabs.push(tab)\n\n toggleTab: (tab) ->\n _.map @tabs, (tab) -> tab.active = false\n\n tab.active = true\n\nangular.module(\"taigaProfile\")\n .controller(\"ProfileTabs\", ProfileTabsController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile-tabs.directive.coffee\n###\n\nProfileTabsDirective = () ->\n return {\n scope: {}\n controller: \"ProfileTabs\"\n controllerAs: \"vm\"\n templateUrl: \"profile/profile-tabs/profile-tabs.html\"\n transclude: true\n }\n\nangular.module(\"taigaProfile\")\n .directive(\"tgProfileTabs\", ProfileTabsDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: profile.controller.coffee\n###\n\nclass ProfileController\n @.$inject = [\n \"tgAppMetaService\",\n \"tgCurrentUserService\",\n \"$routeParams\",\n \"tgUserService\",\n \"tgXhrErrorService\",\n \"$translate\"\n ]\n\n constructor: (@appMetaService, @currentUserService, @routeParams, @userService, @xhrError, @translate) ->\n @.isCurrentUser = false\n\n if @routeParams.slug\n @userService\n .getUserByUserName(@routeParams.slug)\n .then (user) =>\n if !user.get('is_active')\n @xhrError.notFound()\n else\n @.user = user\n @.isCurrentUser = false\n @._setMeta(@.user)\n\n return user\n .catch (xhr) =>\n return @xhrError.response(xhr)\n\n else\n @.user = @currentUserService.getUser()\n @.isCurrentUser = true\n @._setMeta(@.user)\n\n _setMeta: (user) ->\n ctx = {\n userFullName: user.get(\"full_name_display\"),\n userUsername: user.get(\"username\")\n }\n\n title = @translate.instant(\"USER.PROFILE.PAGE_TITLE\", ctx)\n\n description = user.get(\"bio\")\n @appMetaService.setAll(title, description)\n\nangular.module(\"taigaProfile\").controller(\"Profile\", ProfileController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: like-project-button.controller.coffee\n###\n\nclass LikeProjectButtonController\n @.$inject = [\n \"$tgConfirm\"\n \"tgLikeProjectButtonService\"\n ]\n\n constructor: (@confirm, @likeButtonService)->\n @.isMouseOver = false\n @.loading = false\n\n showTextWhenMouseIsOver: ->\n @.isMouseOver = true\n\n showTextWhenMouseIsLeave: ->\n @.isMouseOver = false\n\n toggleLike: ->\n @.loading = true\n\n if not @.project.get(\"is_fan\")\n promise = @._like()\n else\n promise = @._unlike()\n\n promise.finally () => @.loading = false\n\n return promise\n\n _like: ->\n return @likeButtonService.like(@.project.get('id'))\n .then =>\n @.showTextWhenMouseIsLeave()\n .catch =>\n @confirm.notify(\"error\")\n\n _unlike: ->\n return @likeButtonService.unlike(@.project.get('id')).catch =>\n @confirm.notify(\"error\")\n\nangular.module(\"taigaProjects\").controller(\"LikeProjectButton\", LikeProjectButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: like-project-button.directive.coffee\n###\n\nLikeProjectButtonDirective = ->\n return {\n scope: {}\n controller: \"LikeProjectButton\",\n bindToController: {\n project: '='\n }\n controllerAs: \"vm\",\n templateUrl: \"projects/components/like-project-button/like-project-button.html\",\n }\n\nangular.module(\"taigaProjects\").directive(\"tgLikeProjectButton\", LikeProjectButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: like-project-button.service.coffee\n###\n\ntaiga = @.taiga\n\nclass LikeProjectButtonService extends taiga.Service\n @.$inject = [\"tgResources\", \"tgCurrentUserService\", \"tgProjectService\"]\n\n constructor: (@rs, @currentUserService, @projectService) ->\n\n _getProjectIndex: (projectId) ->\n return @currentUserService.projects\n .get('all')\n .findIndex (project) -> project.get('id') == projectId\n\n _updateProjects: (projectId, isFan) ->\n projectIndex = @._getProjectIndex(projectId)\n projects = @currentUserService.projects\n .get('all')\n .update projectIndex, (project) ->\n\n totalFans = project.get(\"total_fans\")\n\n if isFan then totalFans++ else totalFans--\n\n return project.merge({\n is_fan: isFan,\n total_fans: totalFans\n })\n\n @currentUserService.setProjects(projects)\n\n _updateCurrentProject: (isFan) ->\n totalFans = @projectService.project.get(\"total_fans\")\n\n if isFan then totalFans++ else totalFans--\n\n project = @projectService.project.merge({\n is_fan: isFan,\n total_fans: totalFans\n })\n\n @projectService.setProject(project)\n\n like: (projectId) ->\n return @rs.projects.likeProject(projectId).then =>\n @._updateProjects(projectId, true)\n @._updateCurrentProject(true)\n\n unlike: (projectId) ->\n return @rs.projects.unlikeProject(projectId).then =>\n @._updateProjects(projectId, false)\n @._updateCurrentProject(false)\n\nangular.module(\"taigaProjects\").service(\"tgLikeProjectButtonService\", LikeProjectButtonService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: sort-projects.directive.coffee\n###\n\nSortProjectsDirective = (currentUserService) ->\n link = (scope, el, attrs, ctrl) ->\n itemEl = null\n\n el.sortable({\n dropOnEmpty: true\n revert: 200\n axis: \"y\"\n opacity: .95\n placeholder: 'placeholder'\n cancel: '.project-name'\n })\n\n el.on \"sortstop\", (event, ui) ->\n itemEl = ui.item\n project = itemEl.scope().project\n index = itemEl.index()\n\n sorted_project_ids = _.map(scope.projects.toJS(), (p) -> p.id)\n sorted_project_ids = _.without(sorted_project_ids, project.get(\"id\"))\n sorted_project_ids.splice(index, 0, project.get('id'))\n\n sortData = []\n\n for value, index in sorted_project_ids\n sortData.push({\"project_id\": value, \"order\":index})\n\n currentUserService.bulkUpdateProjectsOrder(sortData)\n\n directive = {\n scope: {\n projects: \"=tgSortProjects\"\n },\n link: link\n }\n\n return directive\n\nangular.module(\"taigaProjects\").directive(\"tgSortProjects\", [\"tgCurrentUserService\", SortProjectsDirective])\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-project-button.controller.coffee\n###\n\nclass WatchProjectButtonController\n @.$inject = [\n \"$tgConfirm\"\n \"tgWatchProjectButtonService\"\n ]\n\n constructor: (@confirm, @watchButtonService)->\n @.showWatchOptions = false\n @.loading = false\n\n toggleWatcherOptions: () ->\n @.showWatchOptions = !@.showWatchOptions\n\n closeWatcherOptions: () ->\n @.showWatchOptions = false\n\n watch: (notifyLevel) ->\n @.loading = true\n @.closeWatcherOptions()\n\n return @watchButtonService.watch(@.project.get('id'), notifyLevel)\n .catch () => @confirm.notify(\"error\")\n .finally () => @.loading = false\n\n unwatch: ->\n @.loading = true\n @.closeWatcherOptions()\n\n return @watchButtonService.unwatch(@.project.get('id'))\n .catch () => @confirm.notify(\"error\")\n .finally () => @.loading = false\n\nangular.module(\"taigaProjects\").controller(\"WatchProjectButton\", WatchProjectButtonController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-project-button.directive.coffee\n###\n\nWatchProjectButtonDirective = ->\n return {\n scope: {}\n controller: \"WatchProjectButton\",\n bindToController: {\n project: \"=\"\n }\n controllerAs: \"vm\",\n templateUrl: \"projects/components/watch-project-button/watch-project-button.html\",\n }\n\nangular.module(\"taigaProjects\").directive(\"tgWatchProjectButton\", WatchProjectButtonDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: watch-project-button.service.coffee\n###\n\ntaiga = @.taiga\n\nclass WatchProjectButtonService extends taiga.Service\n @.$inject = [\n \"tgResources\",\n \"tgCurrentUserService\",\n \"tgProjectService\"\n ]\n\n constructor: (@rs, @currentUserService, @projectService) ->\n\n _getProjectIndex: (projectId) ->\n return @currentUserService.projects\n .get('all')\n .findIndex (project) -> project.get('id') == projectId\n\n\n _updateProjects: (projectId, notifyLevel, isWatcher) ->\n projectIndex = @._getProjectIndex(projectId)\n\n projects = @currentUserService.projects\n .get('all')\n .update projectIndex, (project) =>\n totalWatchers = project.get('total_watchers')\n\n if isWatcher then totalWatchers++ else totalWatchers--\n\n return project.merge({\n is_watcher: isWatcher,\n total_watchers: totalWatchers\n notify_level: notifyLevel\n })\n\n @currentUserService.setProjects(projects)\n\n _updateCurrentProject: (notifyLevel, isWatcher) ->\n totalWatchers = @projectService.project.get(\"total_watchers\")\n\n if isWatcher then totalWatchers++ else totalWatchers--\n\n project = @projectService.project.merge({\n is_watcher: isWatcher,\n total_watchers: totalWatchers\n notify_level: notifyLevel\n })\n\n @projectService.setProject(project)\n\n watch: (projectId, notifyLevel) ->\n return @rs.projects.watchProject(projectId, notifyLevel).then =>\n @._updateProjects(projectId, notifyLevel, true)\n @._updateCurrentProject(notifyLevel, true)\n\n unwatch: (projectId) ->\n return @rs.projects.unwatchProject(projectId).then =>\n @._updateProjects(projectId, null, false)\n @._updateCurrentProject(null, false)\n\nangular.module(\"taigaProjects\").service(\"tgWatchProjectButtonService\", WatchProjectButtonService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects-listing.controller.coffee\n###\n\nclass ProjectsListingController\n @.$inject = [\n \"tgCurrentUserService\",\n \"tgProjectsService\",\n ]\n\n constructor: (@currentUserService, @projectsService) ->\n taiga.defineImmutableProperty(@, \"projects\", () => @currentUserService.projects.get(\"all\"))\n\n newProject: ->\n @projectsService.newProject()\n\nangular.module(\"taigaProjects\").controller(\"ProjectsListing\", ProjectsListingController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project.controller.coffee\n###\n\nclass ProjectController\n @.$inject = [\n \"$routeParams\",\n \"tgAppMetaService\",\n \"$tgAuth\",\n \"$translate\",\n \"tgProjectService\"\n ]\n\n constructor: (@routeParams, @appMetaService, @auth, @translate, @projectService) ->\n projectSlug = @routeParams.pslug\n @.user = @auth.userData\n\n taiga.defineImmutableProperty @, \"project\", () => return @projectService.project\n taiga.defineImmutableProperty @, \"members\", () => return @projectService.activeMembers\n\n @appMetaService.setfn @._setMeta.bind(this)\n\n _setMeta: (project)->\n metas = {}\n\n return metas if !@.project\n\n ctx = {projectName: @.project.get(\"name\")}\n\n metas.title = @translate.instant(\"PROJECT.PAGE_TITLE\", ctx)\n metas.description = @.project.get(\"description\")\n\n return metas\n\nangular.module(\"taigaProjects\").controller(\"Project\", ProjectController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects.service.coffee\n###\n\ntaiga = @.taiga\ngroupBy = @.taiga.groupBy\n\nclass ProjectsService extends taiga.Service\n @.$inject = [\"tgResources\", \"$projectUrl\", \"tgLightboxFactory\"]\n\n constructor: (@rs, @projectUrl, @lightboxFactory) ->\n\n getProjectBySlug: (projectSlug) ->\n return @rs.projects.getProjectBySlug(projectSlug)\n .then (project) =>\n return @._decorate(project)\n\n getProjectStats: (projectId) ->\n return @rs.projects.getProjectStats(projectId)\n\n getProjectsByUserId: (userId, paginate) ->\n return @rs.projects.getProjectsByUserId(userId, paginate)\n .then (projects) =>\n return projects.map @._decorate.bind(@)\n\n _decorate: (project) ->\n url = @projectUrl.get(project.toJS())\n\n project = project.set(\"url\", url)\n colorized_tags = []\n\n if project.get(\"tags\")\n tags = project.get(\"tags\").sort()\n\n colorized_tags = tags.map (tag) ->\n color = project.get(\"tags_colors\").get(tag)\n return Immutable.fromJS({name: tag, color: color})\n\n project = project.set(\"colorized_tags\", colorized_tags)\n\n return project\n\n newProject: ->\n @lightboxFactory.create(\"tg-lb-create-project\", {\n \"class\": \"wizard-create-project\"\n })\n\n bulkUpdateProjectsOrder: (sortData) ->\n return @rs.projects.bulkUpdateOrder(sortData)\n\nangular.module(\"taigaProjects\").service(\"tgProjectsService\", ProjectsService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: external-apps-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.getApplicationToken = (applicationId, state) ->\n url = urlsService.resolve(\"applications\")\n url = \"#{url}/#{applicationId}/token?state=#{state}\"\n return http.get(url).then (result) ->\n Immutable.fromJS(result.data)\n\n service.authorizeApplicationToken = (applicationId, state) ->\n url = urlsService.resolve(\"application-tokens\")\n url = \"#{url}/authorize\"\n data = {\n \"state\": state\n \"application\": applicationId\n }\n\n return http.post(url, data).then (result) ->\n Immutable.fromJS(result.data)\n\n return () ->\n return {\"externalapps\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgExternalAppsResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: issues-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.listInAllProjects = (params) ->\n url = urlsService.resolve(\"issues\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n return () ->\n return {\"issues\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgIssuesResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: projects-resource.service.coffee\n###\n\npagination = () ->\n\nResource = (urlsService, http, paginateResponseService) ->\n service = {}\n\n service.getProjectBySlug = (projectSlug) ->\n url = urlsService.resolve(\"projects\")\n\n url = \"#{url}/by_slug?slug=#{projectSlug}\"\n\n return http.get(url)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getProjectsByUserId = (userId, paginate=false) ->\n url = urlsService.resolve(\"projects\")\n httpOptions = {}\n\n if !paginate\n httpOptions.headers = {\n \"x-disable-pagination\": \"1\"\n }\n\n params = {\"member\": userId, \"order_by\": \"memberships__user_order\"}\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getProjectStats = (projectId) ->\n url = urlsService.resolve(\"projects\")\n url = \"#{url}/#{projectId}\"\n\n return http.get(url)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.bulkUpdateOrder = (bulkData) ->\n url = urlsService.resolve(\"bulk-update-projects-order\")\n return http.post(url, bulkData)\n\n service.getTimeline = (projectId, page) ->\n params = {\n page: page\n }\n\n url = urlsService.resolve(\"timeline-project\")\n url = \"#{url}/#{projectId}\"\n\n return http.get(url, params).then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.likeProject = (projectId) ->\n url = urlsService.resolve(\"project-like\", projectId)\n return http.post(url)\n\n service.unlikeProject = (projectId) ->\n url = urlsService.resolve(\"project-unlike\", projectId)\n return http.post(url)\n\n service.watchProject = (projectId, notifyPolicy) ->\n data = {\n notify_policy: notifyPolicy\n }\n url = urlsService.resolve(\"project-watch\", projectId)\n return http.post(url, data)\n\n service.unwatchProject = (projectId) ->\n url = urlsService.resolve(\"project-unwatch\", projectId)\n return http.post(url)\n\n return () ->\n return {\"projects\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgProjectsResources\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: resources.coffee\n###\n\nservices = [\n \"tgProjectsResources\",\n \"tgUserResources\",\n \"tgUsersResources\",\n \"tgUserstoriesResource\",\n \"tgTasksResource\",\n \"tgIssuesResource\",\n \"tgExternalAppsResource\"\n]\n\nResources = ($injector) ->\n for serviceName in services\n serviceFn = $injector.get(serviceName)\n\n service = $injector.invoke(serviceFn)\n\n for serviceProperty in Object.keys(service)\n if @[serviceProperty]\n console.warm(\"repeated resource \" + serviceProperty)\n\n @[serviceProperty] = service[serviceProperty]\n\n return @\n\n\nResources.$inject = [\"$injector\"]\n\nangular.module(\"taigaResources2\").service(\"tgResources\", Resources)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: tasks-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.listInAllProjects = (params) ->\n url = urlsService.resolve(\"tasks\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n return () ->\n return {\"tasks\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgTasksResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-resource.service.coffee\n###\n\nResource = (urlsService, http, paginateResponseService) ->\n service = {}\n\n service.getUserStorage = (key) ->\n url = urlsService.resolve(\"user-storage\")\n\n if key\n url += '/' + key\n\n httpOptions = {}\n\n return http.get(url, {}).then (response) ->\n return response.data.value\n\n service.setUserStorage = (key, value) ->\n url = urlsService.resolve(\"user-storage\") + '/' + key\n\n params = {\n key: key,\n value: value\n }\n\n return http.put(url, params)\n\n service.createUserStorage = (key, value) ->\n url = urlsService.resolve(\"user-storage\")\n\n params = {\n key: key,\n value: value\n }\n\n return http.post(url, params)\n\n return () ->\n return {\"user\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgUserResources\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: users-resource.service.coffee\n###\n\nResource = (urlsService, http, paginateResponseService) ->\n service = {}\n\n service.getUserByUsername = (username) ->\n url = urlsService.resolve(\"by_username\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n params = {\n username: username\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getStats = (userId) ->\n url = urlsService.resolve(\"user-stats\", userId)\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, {}, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getContacts = (userId) ->\n url = urlsService.resolve(\"user-contacts\", userId)\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, {}, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n service.getLiked = (userId, page, type, q) ->\n url = urlsService.resolve(\"user-liked\", userId)\n\n params = {}\n params.page = page if page?\n params.type = type if type?\n params.q = q if q?\n\n return http.get(url, params)\n .then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getVoted = (userId, page, type, q) ->\n url = urlsService.resolve(\"user-voted\", userId)\n\n params = {}\n params.page = page if page?\n params.type = type if type?\n params.q = q if q?\n\n return http.get(url, params)\n .then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getWatched = (userId, page, type, q) ->\n url = urlsService.resolve(\"user-watched\", userId)\n\n params = {}\n params.page = page if page?\n params.type = type if type?\n params.q = q if q?\n\n return http.get(url, params)\n .then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getProfileTimeline = (userId, page) ->\n params = {\n page: page\n }\n\n url = urlsService.resolve(\"timeline-profile\")\n url = \"#{url}/#{userId}\"\n\n return http.get(url, params).then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n service.getUserTimeline = (userId, page) ->\n params = {\n page: page\n }\n\n url = urlsService.resolve(\"timeline-user\")\n url = \"#{url}/#{userId}\"\n\n return http.get(url, params).then (result) ->\n result = Immutable.fromJS(result)\n return paginateResponseService(result)\n\n return () ->\n return {\"users\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgUsersResources\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: userstories-resource.service.coffee\n###\n\nResource = (urlsService, http) ->\n service = {}\n\n service.listInAllProjects = (params) ->\n url = urlsService.resolve(\"userstories\")\n\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n }\n\n return http.get(url, params, httpOptions)\n .then (result) ->\n return Immutable.fromJS(result.data)\n\n return () ->\n return {\"userstories\": service}\n\nResource.$inject = [\"$tgUrls\", \"$tgHttp\"]\n\nmodule = angular.module(\"taigaResources2\")\nmodule.factory(\"tgUserstoriesResource\", Resource)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: app-meta.service.coffee\n###\n\ntaiga = @.taiga\n\ntruncate = taiga.truncate\n\n\nclass AppMetaService\n @.$inject = [\n \"$rootScope\"\n ]\n\n constructor: (@rootScope) ->\n\n _set: (key, value) ->\n return if not key\n\n if key == \"title\"\n meta = $(\"title\")\n\n if meta.length == 0\n meta = $(\"\")\n $(\"head\").append(meta)\n\n meta.text(value or \"\")\n else if key.indexOf(\"og:\") == 0\n meta = $(\"meta[property='#{key}']\")\n\n if meta.length == 0\n meta = $(\"\")\n $(\"head\").append(meta)\n\n meta.attr(\"content\", value or \"\")\n else\n meta = $(\"meta[name='#{key}']\")\n\n if meta.length == 0\n meta = $(\"\")\n $(\"head\").append(meta)\n\n meta.attr(\"content\", value or \"\")\n\n setTitle: (title) ->\n @._set('title', title)\n\n setDescription: (description) ->\n @._set(\"description\", truncate(description, 250))\n\n setTwitterMetas: (title, description) ->\n @._set(\"twitter:card\", \"summary\")\n @._set(\"twitter:site\", \"@taigaio\")\n @._set(\"twitter:title\", title)\n @._set(\"twitter:description\", truncate(description, 300))\n @._set(\"twitter:image\", \"#{window.location.origin}/images/logo-color.png\")\n\n setOpenGraphMetas: (title, description) ->\n @._set(\"og:type\", \"object\")\n @._set(\"og:site_name\", \"Taiga - Love your projects\")\n @._set(\"og:title\", title)\n @._set(\"og:description\", truncate(description, 300))\n @._set(\"og:image\", \"#{window.location.origin}/images/logo-color.png\")\n @._set(\"og:url\", window.location.href)\n\n setAll: (title, description) ->\n @.setTitle(title)\n @.setDescription(description)\n @.setTwitterMetas(title, description)\n @.setOpenGraphMetas(title, description)\n\n addMobileViewport: () ->\n $(\"head\").append(\n \"\"\n )\n\n removeMobileViewport: () ->\n $(\"meta[name=\\\"viewport\\\"]\").remove()\n\n setfn: (fn) ->\n @._listener() if @.listener\n\n @._listener = @rootScope.$watchCollection fn, (metas) =>\n @.setAll(metas.title, metas.description)\n\n\nangular.module(\"taigaCommon\").service(\"tgAppMetaService\", AppMetaService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: check-permissions.service.coffee\n###\n\ntaiga = @.taiga\n\nclass ChekcPermissionsService\n @.$inject = [\n \"tgProjectService\"\n ]\n\n constructor: (@projectService) ->\n\n check: (permission) ->\n return @projectService.project.get('my_permissions').indexOf(permission) != -1\n\nangular.module(\"taigaCommon\").service(\"tgCheckPermissionsService\", ChekcPermissionsService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: current-user.service.coffee\n###\n\ntaiga = @.taiga\n\ngroupBy = @.taiga.groupBy\n\nclass CurrentUserService\n @.$inject = [\n \"tgProjectsService\",\n \"$tgStorage\",\n \"tgResources\"\n ]\n\n constructor: (@projectsService, @storageService, @rs) ->\n @._user = null\n @._projects = Immutable.Map()\n @._projectsById = Immutable.Map()\n @._joyride = null\n\n taiga.defineImmutableProperty @, \"projects\", () => return @._projects\n taiga.defineImmutableProperty @, \"projectsById\", () => return @._projectsById\n\n isAuthenticated: ->\n if @.getUser() != null\n return true\n return false\n\n getUser: () ->\n if !@._user\n userData = @storageService.get(\"userInfo\")\n\n if userData\n userData = Immutable.fromJS(userData)\n @.setUser(userData)\n\n return @._user\n\n removeUser: () ->\n @._user = null\n @._projects = Immutable.Map()\n @._projectsById = Immutable.Map()\n @._joyride = null\n\n setUser: (user) ->\n @._user = user\n\n return @._loadUserInfo()\n\n bulkUpdateProjectsOrder: (sortData) ->\n @projectsService.bulkUpdateProjectsOrder(sortData).then () =>\n @.loadProjects()\n\n loadProjects: () ->\n return @projectsService.getProjectsByUserId(@._user.get(\"id\"))\n .then (projects) => @.setProjects(projects)\n\n disableJoyRide: (section) ->\n if section\n @._joyride[section] = false\n else\n @._joyride = {\n backlog: false,\n kanban: false,\n dashboard: false\n }\n\n @rs.user.setUserStorage('joyride', @._joyride)\n\n loadJoyRideConfig: () ->\n return new Promise (resolve) =>\n if @._joyride != null\n resolve(@._joyride)\n return\n\n @rs.user.getUserStorage('joyride')\n .then (config) =>\n @._joyride = config\n resolve(@._joyride)\n .catch () =>\n #joyride not defined\n @._joyride = {\n backlog: true,\n kanban: true,\n dashboard: true\n }\n\n @rs.user.createUserStorage('joyride', @._joyride)\n\n resolve(@._joyride)\n\n _loadUserInfo: () ->\n return Promise.all([\n @.loadProjects()\n ])\n\n setProjects: (projects) ->\n @._projects = @._projects.set(\"all\", projects)\n @._projects = @._projects.set(\"recents\", projects.slice(0, 10))\n\n @._projectsById = Immutable.fromJS(groupBy(projects.toJS(), (p) -> p.id))\n\n return @.projects\n\nangular.module(\"taigaCommon\").service(\"tgCurrentUserService\", CurrentUserService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: lightbox-factory.service.coffee\n###\n\nclass LightboxFactory\n @.$inject = [\"$rootScope\", \"$compile\"]\n constructor: (@rootScope, @compile) ->\n\n create: (name, attrs) ->\n scope = @rootScope.$new()\n\n elm = $(\"
\")\n .attr(name, true)\n .attr(\"tg-bind-scope\", true)\n\n if attrs\n elm.attr(attrs)\n\n elm.addClass(\"remove-on-close\")\n\n html = @compile(elm)(scope)\n\n $(document.body).append(html)\n\n return\n\nangular.module(\"taigaCommon\").service(\"tgLightboxFactory\", LightboxFactory)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: paginate-response.service.coffee\n###\n\nPaginateResponse = () ->\n return (result) ->\n paginateResponse = Immutable.Map({\n \"data\": result.get(\"data\"),\n \"next\": !!result.get(\"headers\")(\"x-pagination-next\"),\n \"prev\": !!result.get(\"headers\")(\"x-pagination-prev\"),\n \"current\": result.get(\"headers\")(\"x-pagination-current\"),\n \"count\": result.get(\"headers\")(\"x-pagination-count\")\n })\n\n return paginateResponse\n\nangular.module(\"taigaCommon\").factory(\"tgPaginateResponseService\", PaginateResponse)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: project.service.coffee\n###\n\ntaiga = @.taiga\n\nclass ProjectService\n @.$inject = [\n \"tgProjectsService\",\n \"tgXhrErrorService\"\n ]\n\n constructor: (@projectsService, @xhrError) ->\n @._project = null\n @._section = null\n @._sectionsBreadcrumb = Immutable.List()\n @._activeMembers = Immutable.List()\n\n taiga.defineImmutableProperty @, \"project\", () => return @._project\n taiga.defineImmutableProperty @, \"section\", () => return @._section\n taiga.defineImmutableProperty @, \"sectionsBreadcrumb\", () => return @._sectionsBreadcrumb\n taiga.defineImmutableProperty @, \"activeMembers\", () => return @._activeMembers\n\n setSection: (section) ->\n @._section = section\n\n if section\n @._sectionsBreadcrumb = @._sectionsBreadcrumb.push(@._section)\n else\n @._sectionsBreadcrumb = Immutable.List()\n\n setProjectBySlug: (pslug) ->\n return new Promise (resolve, reject) =>\n if !@.project || @.project.get('slug') != pslug\n @projectsService\n .getProjectBySlug(pslug)\n .then (project) =>\n @.setProject(project)\n resolve()\n .catch (xhr) =>\n @xhrError.response(xhr)\n\n else resolve()\n\n setProject: (project) ->\n @._project = project\n @._activeMembers = @._project.get('members').filter (member) -> member.get('is_active')\n\n cleanProject: () ->\n @._project = null\n @._activeMembers = Immutable.List()\n @._section = null\n @._sectionsBreadcrumb = Immutable.List()\n\n fetchProject: () ->\n pslug = @.project.get('slug')\n\n return @projectsService.getProjectBySlug(pslug).then (project) => @.setProject(project)\n\nangular.module(\"taigaCommon\").service(\"tgProjectService\", ProjectService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: scope-event.service.coffee\n###\n\nclass ScopeEvent\n scopes: {},\n _searchDuplicatedScopes: (id) ->\n return _.find Object.keys(@scopes), (key) =>\n return @scopes[key].$id == id\n\n _create: (name, scope) ->\n duplicatedScopeName = @._searchDuplicatedScopes(scope.$id)\n\n if duplicatedScopeName\n throw new Error(\"scopeEvent: this scope is already\n register with the name \\\"\" + duplicatedScopeName + \"\\\"\")\n\n if @scopes[name]\n throw new Error(\"scopeEvent: \\\"\" + name + \"\\\" already in use\")\n else\n scope._tgEmitter = new EventEmitter2()\n\n scope.$on \"$destroy\", () =>\n scope._tgEmitter.removeAllListeners()\n delete @scopes[name]\n\n @scopes[name] = scope\n\n emitter: (name, scope) ->\n if scope\n scope = @._create(name, scope)\n else if @scopes[name]\n scope = @scopes[name]\n else\n throw new Error(\"scopeEvent: \\\"\" + name + \"\\\" scope doesn't exist'\")\n\n return scope._tgEmitter\n\nangular.module(\"taigaCommon\").service(\"tgScopeEvent\", ScopeEvent)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: theme.service.coffee\n###\n\ntaiga = @.taiga\n\n\nclass ThemeService extends taiga.Service = ->\n use: (themeName) ->\n stylesheetEl = $(\"link[rel='stylesheet']\")\n\n if stylesheetEl.length == 0\n stylesheetEl = $(\"\")\n $(\"head\").append(stylesheetEl)\n\n stylesheetEl.attr(\"href\", \"/styles/theme-#{themeName}.css\")\n\n\nangular.module(\"taigaCommon\").service(\"tgThemeService\", ThemeService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user.service.coffee\n###\n\ntaiga = @.taiga\nbindMethods = taiga.bindMethods\n\n\nclass UserService extends taiga.Service\n @.$inject = [\"tgResources\"]\n\n constructor: (@rs) ->\n bindMethods(@)\n\n getUserByUserName: (username) ->\n return @rs.users.getUserByUsername(username)\n\n getContacts: (userId) ->\n return @rs.users.getContacts(userId)\n\n getLiked: (userId, pageNumber, objectType, textQuery) ->\n return @rs.users.getLiked(userId, pageNumber, objectType, textQuery)\n\n getVoted: (userId, pageNumber, objectType, textQuery) ->\n return @rs.users.getVoted(userId, pageNumber, objectType, textQuery)\n\n getWatched: (userId, pageNumber, objectType, textQuery) ->\n return @rs.users.getWatched(userId, pageNumber, objectType, textQuery)\n\n getStats: (userId) ->\n return @rs.users.getStats(userId)\n\n attachUserContactsToProjects: (userId, projects) ->\n return @.getContacts(userId)\n .then (contacts) ->\n projects = projects.map (project) ->\n contactsFiltered = contacts.filter (contact) ->\n contactId = contact.get(\"id\")\n return project.get('members').indexOf(contactId) != -1\n\n project = project.set(\"contacts\", contactsFiltered)\n\n return project\n\n return projects\n\nangular.module(\"taigaCommon\").service(\"tgUserService\", UserService)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: xhrError.service.coffee\n###\n\nclass xhrError extends taiga.Service\n @.$inject = [\n \"$q\",\n \"$location\",\n \"$tgNavUrls\"\n ]\n\n constructor: (@q, @location, @navUrls) ->\n\n notFound: () ->\n @location.path(@navUrls.resolve(\"not-found\"))\n @location.replace()\n\n permissionDenied: () ->\n @location.path(@navUrls.resolve(\"permission-denied\"))\n @location.replace()\n\n response: (xhr) ->\n if xhr\n if xhr.status == 404\n @.notFound()\n\n else if xhr.status == 403\n @.permissionDenied()\n\n return @q.reject(xhr)\n\nangular.module(\"taigaCommon\").service(\"tgXhrErrorService\", xhrError)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-attachment.directive.coffee\n###\n\nUserTimelineAttachmentDirective = (template, $compile) ->\n validFileExtensions = [\".jpg\", \".jpeg\", \".bmp\", \".gif\", \".png\"]\n\n isImage = (url) ->\n url = url.toLowerCase()\n\n return _.some validFileExtensions, (extension) ->\n return url.indexOf(extension, url - extension.length) != -1\n\n link = (scope, el) ->\n is_image = isImage(scope.attachment.get('url'))\n\n if is_image\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment-image.html\")\n else\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment.html\")\n\n el.html(templateHtml)\n $compile(el.contents())(scope)\n\n el.find(\"img\").error () -> @.remove()\n\n return {\n link: link\n scope: {\n attachment: \"=tgUserTimelineAttachment\"\n }\n }\n\nUserTimelineAttachmentDirective.$inject = [\n \"$tgTemplate\",\n \"$compile\"\n]\n\nangular.module(\"taigaUserTimeline\")\n .directive(\"tgUserTimelineAttachment\", UserTimelineAttachmentDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-item-title.service.coffee\n###\n\nunslugify = @.taiga.unslugify\n\nclass UserTimelineItemTitle\n @.$inject = [\n \"$translate\"\n ]\n\n _fieldTranslationKey: {\n 'status': 'COMMON.FIELDS.STATUS',\n 'subject': 'COMMON.FIELDS.SUBJECT',\n 'description_diff': 'COMMON.FIELDS.DESCRIPTION',\n 'points': 'COMMON.FIELDS.POINTS',\n 'assigned_to': 'COMMON.FIELDS.ASSIGNED_TO',\n 'severity': 'ISSUES.FIELDS.SEVERITY',\n 'priority': 'ISSUES.FIELDS.PRIORITY',\n 'type': 'ISSUES.FIELDS.TYPE',\n 'is_iocaine': 'TASK.FIELDS.IS_IOCAINE',\n 'is_blocked': 'COMMON.FIELDS.IS_BLOCKED'\n }\n\n _params: {\n username: (timeline, event) ->\n user = timeline.getIn(['data', 'user'])\n\n if user.get('is_profile_visible')\n title_attr = @translate.instant('COMMON.SEE_USER_PROFILE', {username: user.get('username')})\n url = \"user-profile:username=timeline.getIn(['data', 'user', 'username'])\"\n\n return @._getLink(url, user.get('name'), title_attr)\n else\n return @._getUsernameSpan(user.get('name'))\n\n field_name: (timeline, event) ->\n field_name = timeline.getIn(['data', 'value_diff', 'key'])\n\n return @translate.instant(@._fieldTranslationKey[field_name])\n\n project_name: (timeline, event) ->\n url = \"project:project=timeline.getIn(['data', 'project', 'slug'])\"\n\n return @._getLink(url, timeline.getIn([\"data\", \"project\", \"name\"]))\n\n new_value: (timeline, event) ->\n if _.isArray(timeline.getIn([\"data\", \"value_diff\", \"value\"]).toJS())\n value = timeline.getIn([\"data\", \"value_diff\", \"value\"]).get(1)\n\n # assigned to unasigned\n if value == null && timeline.getIn([\"data\", \"value_diff\", \"key\"]) == 'assigned_to'\n value = @translate.instant('ACTIVITY.VALUES.UNASSIGNED')\n\n return value\n else\n return timeline.getIn([\"data\", \"value_diff\", \"value\"]).first().get(1)\n\n sprint_name: (timeline, event) ->\n url = \"project-taskboard:project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['data', 'milestone', 'slug'])\"\n\n return @._getLink(url, timeline.getIn(['data', 'milestone', 'name']))\n\n us_name: (timeline, event) ->\n obj = @._getTimelineObj(timeline, event).get('userstory')\n\n event_us = {obj: 'parent_userstory'}\n url = @._getDetailObjUrl(event_us)\n\n text = '#' + obj.get('ref') + ' ' + obj.get('subject')\n\n return @._getLink(url, text)\n\n obj_name: (timeline, event) ->\n obj = @._getTimelineObj(timeline, event)\n url = @._getDetailObjUrl(event)\n\n if event.obj == 'wikipage'\n text = unslugify(obj.get('slug'))\n else if event.obj == 'milestone'\n text = obj.get('name')\n else\n text = '#' + obj.get('ref') + ' ' + obj.get('subject')\n\n return @._getLink(url, text)\n\n role_name: (timeline, event) ->\n return timeline.getIn(['data', 'value_diff', 'value']).keySeq().first()\n }\n\n constructor: (@translate) ->\n\n\n _translateTitleParams: (param, timeline, event) ->\n return @._params[param].call(this, timeline, event)\n\n _getTimelineObj: (timeline, event) ->\n return timeline.getIn(['data', event.obj])\n\n _getDetailObjUrl: (event) ->\n url = {\n \"issue\": [\"project-issues-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"wikipage\": [\"project-wiki-page\", \":project=timeline.getIn(['data', 'project', 'slug']),slug=timeline.getIn(['obj', 'slug'])\"],\n \"task\": [\"project-tasks-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"parent_userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'userstory', 'ref'])\"],\n \"milestone\": [\"project-taskboard\", \":project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['obj', 'slug'])\"]\n }\n\n return url[event.obj][0] + url[event.obj][1]\n\n _getLink: (url, text, title) ->\n title = title || text\n\n return $('')\n .attr('tg-nav', url)\n .text(text)\n .attr('title', title)\n .prop('outerHTML')\n\n _getUsernameSpan: (text) ->\n title = title || text\n\n return $('')\n .addClass('username')\n .text(text)\n .prop('outerHTML')\n\n _getParams: (timeline, event, timeline_type) ->\n params = {}\n\n timeline_type.translate_params.forEach (param) =>\n params[param] = @._translateTitleParams(param, timeline, event)\n\n return params\n\n getTitle: (timeline, event, type) ->\n return @translate.instant(type.key, @._getParams(timeline, event, type))\n\nangular.module(\"taigaUserTimeline\")\n .service(\"tgUserTimelineItemTitle\", UserTimelineItemTitle)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-item-type.service.coffee\n###\n\ntimelineType = (timeline, event) ->\n types = [\n { # NewMember\n check: (timeline, event) ->\n return event.obj == 'membership'\n key: 'TIMELINE.NEW_MEMBER',\n translate_params: ['project_name']\n member: (timeline) ->\n return Immutable.Map({\n user: timeline.getIn(['data', 'user']),\n role: timeline.getIn(['data', 'role'])\n })\n },\n { # NewProject\n check: (timeline, event) ->\n return event.obj == 'project' && event.type == 'create'\n key: 'TIMELINE.NEW_PROJECT',\n translate_params: ['username', 'project_name'],\n description: (timeline) ->\n return timeline.getIn(['data', 'project', 'description'])\n },\n { # NewAttachment\n check: (timeline, event) ->\n return event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'attachments'\n key: 'TIMELINE.UPLOAD_ATTACHMENT',\n translate_params: ['username', 'obj_name']\n },\n { # NewUs\n check: (timeline, event) ->\n return event.obj == 'userstory' && event.type == 'create'\n key: 'TIMELINE.US_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewIssue\n check: (timeline, event) ->\n return event.obj == 'issue' && event.type == 'create'\n key: 'TIMELINE.ISSUE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewWiki\n check: (timeline, event) ->\n return event.obj == 'wikipage' && event.type == 'create'\n key: 'TIMELINE.WIKI_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewTask\n check: (timeline, event) ->\n return event.obj == 'task' && event.type == 'create' && !timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewTask with US\n check: (timeline, event) ->\n return event.obj == 'task' && event.type == 'create' && timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_CREATED_WITH_US',\n translate_params: ['username', 'project_name', 'obj_name', 'us_name']\n },\n { # NewMilestone\n check: (timeline, event) ->\n return event.obj == 'milestone' && event.type == 'create'\n key: 'TIMELINE.MILESTONE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n },\n { # NewUsComment\n check: (timeline, event) ->\n return timeline.getIn(['data', 'comment']) && event.obj == 'userstory'\n key: 'TIMELINE.NEW_COMMENT_US',\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n return $(timeline.getIn(['data', 'comment_html'])).text()\n },\n { # NewIssueComment\n check: (timeline, event) ->\n return timeline.getIn(['data', 'comment']) && event.obj == 'issue'\n key: 'TIMELINE.NEW_COMMENT_ISSUE',\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n return $(timeline.getIn(['data', 'comment_html'])).text()\n },\n { # NewTaskComment\n check: (timeline, event) ->\n return timeline.getIn(['data', 'comment']) && event.obj == 'task'\n key: 'TIMELINE.NEW_COMMENT_TASK'\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n return $(timeline.getIn(['data', 'comment_html'])).text()\n },\n { # UsMove\n check: (timeline, event) ->\n return timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'moveInBacklog' &&\n timeline.hasIn(['data', 'value_diff', 'value', 'backlog_order']) &&\n event.type == 'change'\n key: 'TIMELINE.US_MOVED',\n translate_params: ['username', 'obj_name']\n },\n { # UsToBacklog\n check: (timeline, event) ->\n if timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'moveInBacklog' &&\n event.type == 'change'\n\n return timeline.getIn(['data', 'value_diff', 'value', 'milestone']).get(1) == null\n\n return false\n key: 'TIMELINE.US_REMOVED_FROM_MILESTONE',\n translate_params: ['username', 'obj_name']\n },\n { # UsToMilestone\n check: (timeline, event) ->\n return timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'moveInBacklog' &&\n event.type == 'change'\n key: 'TIMELINE.US_ADDED_MILESTONE',\n translate_params: ['username', 'obj_name', 'sprint_name']\n },\n { # Blocked\n check: (timeline, event) ->\n if timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'blocked' &&\n event.type == 'change'\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) == true\n\n return false\n key: 'TIMELINE.BLOCKED',\n translate_params: ['username', 'obj_name'],\n description: (timeline) ->\n if timeline.hasIn(['data', 'value_diff', 'value', 'blocked_note_html'])\n return $(timeline.getIn(['data', 'value_diff', 'value', 'blocked_note_html']).get(1)).text()\n else\n return false\n },\n { # UnBlocked\n check: (timeline, event) ->\n if timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'blocked' &&\n event.type == 'change'\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) == false\n\n return false\n key: 'TIMELINE.UNBLOCKED',\n translate_params: ['username', 'obj_name']\n },\n { # MilestoneUpdated\n check: (timeline, event) ->\n return event.obj == 'milestone' && event.type == 'change'\n key: 'TIMELINE.MILESTONE_UPDATED',\n translate_params: ['username', 'obj_name']\n },\n { # WikiUpdated\n check: (timeline, event) ->\n return event.obj == 'wikipage' && event.type == 'change'\n key: 'TIMELINE.WIKI_UPDATED',\n translate_params: ['username', 'obj_name']\n },\n { # UsUpdated points\n check: (timeline, event) ->\n return event.obj == 'userstory' &&\n event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'points'\n key: 'TIMELINE.US_UPDATED_POINTS',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value', 'role_name']\n },\n { # UsUpdated description\n check: (timeline, event) ->\n return event.obj == 'userstory' &&\n event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.US_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n },\n { # UsUpdated general\n check: (timeline, event) ->\n return event.obj == 'userstory' &&\n event.type == 'change'\n key: 'TIMELINE.US_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n },\n { # IssueUpdated description\n check: (timeline, event) ->\n return event.obj == 'issue' &&\n event.type == 'change' &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.ISSUE_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n },\n { # IssueUpdated general\n check: (timeline, event) ->\n return event.obj == 'issue' &&\n event.type == 'change'\n key: 'TIMELINE.ISSUE_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n },\n { # TaskUpdated description\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n !timeline.getIn(['data', 'task', 'userstory']) &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.TASK_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n },\n { # TaskUpdated with US description\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n timeline.getIn(['data', 'task', 'userstory']) &&\n timeline.hasIn(['data', 'value_diff']) &&\n timeline.getIn(['data', 'value_diff', 'key']) == 'description_diff'\n key: 'TIMELINE.TASK_UPDATED_WITH_US',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name']\n },\n { # TaskUpdated general\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n !timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n },\n { # TaskUpdated with US\n check: (timeline, event) ->\n return event.obj == 'task' &&\n event.type == 'change' &&\n timeline.getIn(['data', 'task', 'userstory'])\n key: 'TIMELINE.TASK_UPDATED_WITH_US_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name', 'new_value']\n },\n { # New User\n check: (timeline, event) ->\n return event.obj == 'user' && event.type == 'create'\n key: 'TIMELINE.NEW_USER',\n translate_params: ['username']\n }\n ]\n\n return _.find types, (obj) ->\n return obj.check(timeline, event)\n\nclass UserTimelineType\n getType: (timeline, event) -> timelineType(timeline, event)\n\nangular.module(\"taigaUserTimeline\")\n .service(\"tgUserTimelineItemType\", UserTimelineType)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-item.directive.coffee\n###\n\nUserTimelineItemDirective = () ->\n return {\n templateUrl: \"user-timeline/user-timeline-item/user-timeline-item.html\"\n scope: {\n timeline: \"=tgUserTimelineItem\"\n }\n }\n\nangular.module(\"taigaUserTimeline\")\n .directive(\"tgUserTimelineItem\", UserTimelineItemDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline-pagination-sequence.service.coffee\n###\n\nUserTimelinePaginationSequence = () ->\n obj = {}\n\n obj.generate = (config) ->\n page = 1\n items = Immutable.List()\n\n config.minItems = config.minItems || 20\n\n next = () ->\n items = Immutable.List()\n return getContent()\n\n getContent = () ->\n config.fetch(page).then (response) ->\n page++\n\n data = response.get(\"data\")\n\n if config.filter\n data = config.filter(data)\n\n if config.map\n data = data.map(config.map)\n\n items = items.concat(data)\n\n if items.size < config.minItems && response.get(\"next\")\n return getContent()\n\n return Immutable.Map({\n items: items,\n next: response.get(\"next\")\n })\n\n return {\n next: () -> next()\n }\n\n return obj\n\nangular.module(\"taigaUserTimeline\").factory(\"tgUserTimelinePaginationSequenceService\", UserTimelinePaginationSequence)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/profile/profile-timeline/profile-timeline.controller.coffee\n###\n\ntaiga = @.taiga\n\nmixOf = @.taiga.mixOf\n\nclass UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin)\n @.$inject = [\n \"tgUserTimelineService\"\n ]\n\n constructor: (@userTimelineService) ->\n @.timelineList = Immutable.List()\n @.scrollDisabled = false\n\n @.timeline = null\n\n if @.projectId\n @.timeline = @userTimelineService.getProjectTimeline(@.projectId)\n else if @.currentUser\n @.timeline = @userTimelineService.getProfileTimeline(@.user.get(\"id\"))\n else\n @.timeline = @userTimelineService.getUserTimeline(@.user.get(\"id\"))\n\n loadTimeline: () ->\n @.scrollDisabled = true\n\n return @.timeline\n .next()\n .then (response) =>\n @.timelineList = @.timelineList.concat(response.get(\"items\"))\n\n if response.get(\"next\")\n @.scrollDisabled = false\n\n return @.timelineList\n\nangular.module(\"taigaUserTimeline\")\n .controller(\"UserTimeline\", UserTimelineController)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline.directive.coffee\n###\n\nUserTimelineDirective = ->\n return {\n templateUrl: \"user-timeline/user-timeline/user-timeline.html\",\n controller: \"UserTimeline\",\n controllerAs: \"vm\",\n scope: {\n projectId: \"=projectid\",\n user: \"=\",\n currentUser: \"=\"\n },\n bindToController: true\n }\n\nangular.module(\"taigaProfile\").directive(\"tgUserTimeline\", UserTimelineDirective)\n","###\n# Copyright (C) 2014-2015 Taiga Agile LLC \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: user-timeline.service.coffee\n###\n\ntaiga = @.taiga\n\nclass UserTimelineService extends taiga.Service\n @.$inject = [\n \"tgResources\",\n \"tgUserTimelinePaginationSequenceService\",\n \"tgUserTimelineItemType\",\n \"tgUserTimelineItemTitle\"\n ]\n\n constructor: (@rs, @userTimelinePaginationSequenceService, @userTimelineItemType, @userTimelineItemTitle) ->\n\n _valid_fields: [\n 'status',\n 'subject',\n 'description_diff',\n 'assigned_to',\n 'points',\n 'severity',\n 'priority',\n 'type',\n 'attachments',\n 'is_iocaine',\n 'content_diff',\n 'name',\n 'estimated_finish',\n 'estimated_start',\n # customs\n 'blocked',\n 'moveInBacklog',\n 'milestone'\n ]\n\n _invalid: [\n {# Items with only invalid fields\n check: (timeline) ->\n value_diff = timeline.get(\"data\").get(\"value_diff\")\n\n if value_diff\n fieldKey = value_diff.get('key')\n\n if @._valid_fields.indexOf(fieldKey) == -1\n return true\n else if fieldKey == 'attachments' &&\n value_diff.get('value').get('new').size == 0\n return true\n\n return false\n },\n {# Deleted\n check: (timeline) ->\n event = timeline.get('event_type').split(\".\")\n return event[2] == 'delete'\n },\n {# Project change\n check: (timeline) ->\n event = timeline.get('event_type').split(\".\")\n return event[1] == 'project' && event[2] == 'change'\n },\n {# Comment deleted\n check: (timeline) ->\n return !!timeline.get(\"data\").get(\"comment_deleted\")\n },\n {# Task milestone\n check: (timeline) ->\n event = timeline.get('event_type').split(\".\")\n value_diff = timeline.get(\"data\").get(\"value_diff\")\n\n if value_diff &&\n event[1] == \"task\" &&\n event[2] == \"change\" &&\n value_diff.get(\"key\") == \"milestone\"\n return timeline.get(\"data\").get(\"value_diff\").get(\"value\")\n\n return false\n }\n ]\n\n _isInValidTimeline: (timeline) ->\n return _.some @._invalid, (invalid) =>\n return invalid.check.call(this, timeline)\n\n _parseEventType: (event_type) ->\n event_type = event_type.split(\".\")\n\n return {\n section: event_type[0],\n obj: event_type[1],\n type: event_type[2]\n }\n\n _getTimelineObject: (timeline, event) ->\n if timeline.get('data').get(event.obj)\n return timeline.get('data').get(event.obj)\n\n _attachExtraInfoToTimelineEntry: (timeline, event, type) ->\n title = @userTimelineItemTitle.getTitle(timeline, event, type)\n\n timeline = timeline.set('title_html', title)\n\n timeline = timeline.set('obj', @._getTimelineObject(timeline, event))\n\n if type.description\n timeline = timeline.set('description', type.description(timeline))\n\n if type.member\n timeline = timeline.set('member', type.member(timeline))\n\n if timeline.getIn(['data', 'value_diff', 'key']) == 'attachments' &&\n timeline.hasIn(['data', 'value_diff', 'value', 'new'])\n timeline = timeline.set('attachments', timeline.getIn(['data', 'value_diff', 'value', 'new']))\n\n return timeline\n\n # - create a entry per every item in the values_diff\n _parseTimeline: (response) ->\n newdata = Immutable.List()\n\n response.get('data').forEach (item) =>\n event = @._parseEventType(item.get('event_type'))\n\n data = item.get('data')\n values_diff = data.get('values_diff')\n\n if values_diff && values_diff.count()\n # blocked/unblocked change must be a single change\n if values_diff.has('is_blocked')\n values_diff = Immutable.Map({'blocked': values_diff})\n\n if values_diff.has('milestone')\n values_diff = Immutable.Map({'moveInBacklog': values_diff})\n else if event.obj == 'milestone'\n values_diff = Immutable.Map({'milestone': values_diff})\n\n values_diff.forEach (value, key) =>\n obj = Immutable.Map({\n key: key,\n value: value\n })\n\n newItem = item.setIn(['data', 'value_diff'], obj)\n newItem = newItem.deleteIn(['data', 'values_diff'])\n newdata = newdata.push(newItem)\n else\n newItem = item.deleteIn(['data', 'values_diff'])\n newdata = newdata.push(newItem)\n\n return response.set('data', newdata)\n\n _addEntyAttributes: (item) ->\n event = @._parseEventType(item.get('event_type'))\n type = @userTimelineItemType.getType(item, event)\n\n return @._attachExtraInfoToTimelineEntry(item, event, type)\n\n getProfileTimeline: (userId) ->\n config = {}\n\n config.fetch = (page) =>\n return @rs.users.getProfileTimeline(userId, page)\n .then (response) =>\n return @._parseTimeline(response)\n\n config.map = (obj) => @._addEntyAttributes(obj)\n\n config.filter = (items) =>\n return items.filterNot (item) => @._isInValidTimeline(item)\n\n return @userTimelinePaginationSequenceService.generate(config)\n\n getUserTimeline: (userId) ->\n config = {}\n\n config.fetch = (page) =>\n return @rs.users.getUserTimeline(userId, page)\n .then (response) =>\n return @._parseTimeline(response)\n\n config.map = (obj) => @._addEntyAttributes(obj)\n\n config.filter = (items) =>\n return items.filterNot (item) => @._isInValidTimeline(item)\n\n return @userTimelinePaginationSequenceService.generate(config)\n\n getProjectTimeline: (projectId) ->\n config = {}\n\n config.fetch = (page) =>\n return @rs.projects.getTimeline(projectId, page)\n .then (response) => return @._parseTimeline(response)\n\n config.map = (obj) => @._addEntyAttributes(obj)\n\n config.filter = (items) =>\n return items.filterNot (item) => @._isInValidTimeline(item)\n\n return @userTimelinePaginationSequenceService.generate(config)\n\nangular.module(\"taigaUserTimeline\").service(\"tgUserTimelineService\", UserTimelineService)\n","###\n# Copyright (C) 2014-2015 Andrey Antukh \n# Copyright (C) 2014-2015 Jesús Espino Garcia \n# Copyright (C) 2014-2015 David Barragán Merino \n#\n# This program is free software: you can redistribute it and/or modify\n# it under the terms of the GNU Affero General Public License as\n# published by the Free Software Foundation, either version 3 of the\n# License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# You should have received a copy of the GNU Affero General Public License\n# along with this program. If not, see .\n#\n# File: modules/backlog.coffee\n###\n\nmodule = angular.module(\"taigaPlugins\", [\"ngRoute\"])\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/styles/theme-high-contrast.css b/dist/styles/theme-high-contrast.css index b6c68b9..bb17529 100644 --- a/dist/styles/theme-high-contrast.css +++ b/dist/styles/theme-high-contrast.css @@ -1,4 +1,4 @@ @charset "UTF-8";.introjs-arrow,blockquote:after,blockquote:before,q:after,q:before{content:''}.pika-table,table{border-collapse:collapse;border-spacing:0}.kanban-task-minimized .task-name,.ticket-estimation .ticket-role-points .role,h1 .date,h1 span{text-overflow:ellipsis;white-space:nowrap}.lightbox textarea,.wizard-create-project textarea,textarea{resize:vertical}.change-entry .activity-fromto,.home-project-list p,.kanban-task-maximized .task-name,.profile-bar .not-full-name,.profile-bar h1{word-wrap:break-word}.codehilite .hll{background-color:#49483e}.codehilite .c{color:#75715e}.codehilite .err{color:#960050;background-color:#1e0010}.codehilite .k{color:#66d9ef}.codehilite .l{color:#ae81ff}.codehilite .n{color:#f8f8f2}.codehilite .o{color:#f92672}.codehilite .p{color:#f8f8f2}.codehilite .c1,.codehilite .cm,.codehilite .cp,.codehilite .cs{color:#75715e}.codehilite .ge{font-style:italic}.codehilite .gs{font-weight:700}.codehilite .kc,.codehilite .kd{color:#66d9ef}.codehilite .kn{color:#f92672}.codehilite .kp,.codehilite .kr,.codehilite .kt{color:#66d9ef}.codehilite .ld{color:#e6db74}.codehilite .m{color:#ae81ff}.codehilite .s{color:#e6db74}.codehilite .na{color:#a6e22e}.codehilite .nb{color:#f8f8f2}.codehilite .nc{color:#a6e22e}.codehilite .no{color:#66d9ef}.codehilite .nd{color:#a6e22e}.codehilite .ni{color:#f8f8f2}.codehilite .ne,.codehilite .nf{color:#a6e22e}.codehilite .nl,.codehilite .nn{color:#f8f8f2}.codehilite .nx{color:#a6e22e}.codehilite .py{color:#f8f8f2}.codehilite .nt{color:#f92672}.codehilite .nv{color:#f8f8f2}.codehilite .ow{color:#f92672}.codehilite .w{color:#f8f8f2}.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo{color:#ae81ff}.codehilite .s2,.codehilite .sb,.codehilite .sc,.codehilite .sd{color:#e6db74}.codehilite .se{color:#ae81ff}.codehilite .s1,.codehilite .sh,.codehilite .si,.codehilite .sr,.codehilite .ss,.codehilite .sx{color:#e6db74}.codehilite .bp,.codehilite .vc,.codehilite .vg,.codehilite .vi{color:#f8f8f2}.codehilite .il{color:#ae81ff}.codehilite .gu{color:#75715e}.codehilite .gd{color:#f92672}.codehilite .gi{color:#a6e22e}.mCustomScrollbar{-ms-touch-action:none;touch-action:none}.mCustomScrollbar.mCS_no_scrollbar{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0;opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4);height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}.markItUp .markItUpButton1 a{background-image:url(../images/markitup/h1.png)}.markItUp .markItUpButton2 a{background-image:url(../images/markitup/h2.png)}.markItUp .markItUpButton3 a{background-image:url(../images/markitup/h3.png)}.markItUp .markItUpButton4 a{background-image:url(../images/markitup/bold.png)}.markItUp .markItUpButton5 a{background-image:url(../images/markitup/italic.png)}.markItUp .markItUpButton6 a{background-image:url(../images/markitup/stroke.png)}.markdown .markItUpButton7 a{background-image:url(../images/markitup/list-bullet.png)}.markdown .markItUpButton8 a{background-image:url(../images/markitup/list-numeric.png)}.markdown .markItUpButton9 a{background-image:url(../images/markitup/picture.png)}.markdown .markItUpButton10 a{background-image:url(../images/markitup/link.png)}.markdown .markItUpButton11 a{background-image:url(../images/markitup/quotes.png)}.markdown .markItUpButton12 a{background-image:url(../images/markitup/code.png)}.markdown .preview-icon a{background-image:url(../images/markitup/preview.png)}.markdown .help a{background-image:url(../images/markitup/help.png)}.markItUp *{margin:0;padding:0;outline:0}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif}.markItUpEditor{font:12px 'Courier New',Courier,monospace;padding:5px;height:320px;clear:both;line-height:18px;overflow:auto}.markItUpPreviewFrame{overflow:auto;background-color:#FFF;width:99.9%;height:300px;margin:5px 0}.markItUpFooter{width:100%}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin-left:auto;margin-right:auto;background-image:url(../images/markitup/handle.png);cursor:n-resize}.markItUp .markItUpHeader ul{margin:0}.markItUpHeader ul li{list-style:none;position:relative;margin:3px}.markItUpHeader ul li:hover>ul{display:block}.markItUpHeader ul .markItUpDropMenu{background:url(../images/markitup/menu.png) 115% 50% no-repeat;margin-right:5px}.markItUpHeader ul .markItUpDropMenu li{margin-right:0}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0;background:#FFF;border:1px solid #000}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000}.markItUpHeader ul ul .markItUpDropMenu{background:url(../images/markitup/submenu.png) 100% 50% no-repeat #FFF}.markItUpHeader ul .markItUpSeparator{margin:2px 10px 0;width:1px;height:16px;overflow:hidden;background-color:#CCC}.introjs-button,button{overflow:visible}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px}.markItUpHeader ul ul ul li{float:none}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0}.markItUpHeader ul ul a{display:block;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! * Pikaday * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */.pika-single{display:block;position:relative;width:240px;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.introjs-bullets ul,.introjs-button,.pika-select{display:inline-block}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;position:absolute!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid #fff;position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-color:transparent transparent #fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow.left,.introjs-arrow.right{top:10px}.introjs-arrow.right,.introjs-arrow.right-bottom{right:-10px;border-color:transparent transparent transparent #fff}.introjs-arrow.right-bottom{bottom:10px}.introjs-arrow.bottom{bottom:-10px;border-color:#fff transparent transparent}.introjs-arrow.left,.introjs-arrow.left-bottom{left:-10px;border-color:transparent #fff transparent transparent}.introjs-arrow.left-bottom{bottom:10px}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{position:relative;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-progress,.loader-active,.taskboard,.taskboard-inner,body.loading-project,h1 .date,h1 span{overflow:hidden}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.admin-membership header a,.header-with-actions .button,.kanban .kanban-settings,.save-wiki{float:right}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.master,fieldset{position:relative}body,html{width:100%;min-height:100%}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}body,h1,h2,h3,h4,h5,h6{font-weight:400;color:#212121}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}body{font-weight:400;font-family:opensans-regular,Arial,Helvetica,sans-serif;line-height:1.3}.icon{font-family:taiga}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body .master.ng-animate{-webkit-transition:0;transition:0}.drag-active{overflow-x:hidden}.master{height:100%;min-height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu-secondary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary.filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:0}.menu-secondary.filters-bar.active{padding:2em 1em;-webkit-transition:all .2s linear;transition:all .2s linear;width:260px}.menu-secondary.filters-bar.active .filters-inner{opacity:1;-webkit-transition:all .4s ease-in;transition:all .4s ease-in}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-webkit-box-flex:4;-webkit-flex:4;-ms-flex:4;flex:4;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions .action-buttons{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;margin-left:10px}fieldset,p img{margin:0}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}h2{font-size:2rem}h1,h1 span{font-size:3rem}h1,h2{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{margin-bottom:1rem;text-transform:uppercase}h1 span{margin-right:.5rem;vertical-align:bottom}h1 span.green,h1 span:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#000}h1 .date{max-width:500px}h2{line-height:1.2;margin-bottom:1rem}p{line-height:1.5}em{font-style:italic}strong{font-weight:700}[class*=' icon-']:before,[class^=icon-]:before,[data-icon]:before{font-family:taiga!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;speak:none;text-transform:none!important}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{-webkit-transition:color .3s linear;transition:color .3s linear}[data-icon]:before{content:attr(data-icon)}.admin-contrib .help .alt-image,.admin-third-parties .help .alt-image,.wysiwyg dl dt{font-style:italic}.icon-bug:before{content:'a'}.icon-copy:before{content:'b'}.icon-minimize:before{content:'c'}.icon-maximize:before{content:'d'}.icon-comment:before{content:'e'}.icon-plus:before{content:'f'}.icon-attachments:before{content:'g'}.icon-edit:before{content:'h'}.icon-documents:before{content:'i'}.icon-delete:before{content:'j'}.icon-arrow-bottom:before{content:'k'}.icon-arrow-left:before{content:'l'}.icon-arrow-right:before{content:'m'}.icon-arrow-up:before{content:'n'}.icon-briefcase:before{content:'o'}.icon-caret-down:before{content:'p'}.icon-caret-up:before{content:'q'}.icon-check-square:before{content:'r'}.icon-notification-error:before{content:'s'}.icon-settings:before{content:'t'}.icon-document:before{content:'u'}.icon-warning:before{content:'v'}.icon-move:before{content:'w'}.icon-drag-v:before{content:'x'}.icon-filter:before{content:'y'}.icon-help:before{content:'z'}.icon-reload:before{content:'A'}.icon-writer:before{content:'B'}.icon-stats:before{content:'C'}.icon-floppy:before{content:'D'}.icon-warning-alt:before{content:'E'}.icon-video:before{content:'F'}.icon-bulk:before{content:'G'}.icon-vunfold:before{content:'H'}.icon-tasks:before{content:'I'}.icon-kanban:before{content:'J'}.icon-search:before{content:'K'}.icon-wiki:before{content:'L'}.icon-team:before{content:'M'}.icon-vfold:before{content:'N'}.icon-issues:before{content:'O'}.icon-iocaine:before{content:'P'}.icon-archive:before{content:'Q'}.icon-capslock:before{content:'R'}.icon-upload:before{content:'S'}.icon-github:before{content:'T'}.icon-timeline:before{content:'U'}.icon-scrum:before{content:'V'}.icon-project:before{content:'W'}.icon-heart:before{content:'X'}.icon-eye:before{content:'Y'}@-webkit-keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@-webkit-keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;flex:10}}@keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;-ms-flex:10;flex:10}}@-webkit-keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes blink{85%{opacity:1}100%{opacity:.6}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote cite,sup{font-size:.9rem}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{display:block}blockquote cite:before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}sup{vertical-align:super}.blocked-warning .icon,.icon,.us-story-main-data .us-title.blocked{vertical-align:middle}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}.pika-single{z-index:999999}.pika-single .pika-title{color:#212121}.pika-single .is-selected .pika-button{background:#000;border-radius:0!important;box-shadow:inset 0 1px 3px #000}.pika-single .is-today .pika-button{color:#000}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#212121!important;border-radius:0!important;box-shadow:inset 0 1px 3px #212121!important}fieldset{border:0;padding:0;width:100%}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{-webkit-transition:border .3s linear;transition:border .3s linear}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.icon-capslock{bottom:.6rem;color:#757575;display:none;position:absolute;right:1rem}.auth,.error-main{bottom:0;z-index:999;left:0}.admin-membership header:after{clear:both;content:'';display:table}.admin-membership .check input{height:40px;width:85px}.admin-attributes .admin-attributes-section .checksley-error-list li{font-weight:100}.admin-roles p{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#f5f5f5}.auth .logo,.auth .tagline{color:#fff;text-align:center}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.kanban,.taskboard{height:calc(100vh - 40px)}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,36,0,.7);position:absolute;width:100%}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.project-values-title{-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;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem;text-transform:uppercase}.project-values-title h2{margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.invitation-main .avatar,.invitation-main .invitation-container,.kanban{-webkit-box-orient:vertical;-webkit-box-direction:normal}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth .logo{font-size:3rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.auth .auth-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{padding:0 33%;text-align:center;width:100%}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{text-align:center}.auth .login-text a:hover,.auth .register-text a:hover{color:#212121}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moustache;animation-name:moustache;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;fill:rgba(0,0,0,.9);stroke:#212121;stroke-width:1px;-webkit-transform-origin:50% 20%;-ms-transform-origin:50% 20%;transform-origin:50% 20%;-webkit-transition:.3s;transition:.3s}.moustache:hover{fill:rgba(33,33,33,.9);-webkit-transition:.3s;transition:.3s}.list-itemtype-project .icon path,.list-itemtype-project .list-itemtype-track-likers.active path,.list-itemtype-project .list-itemtype-track-watchers.active path,.list-itemtype-ticket .icon path,.list-itemtype-ticket .list-itemtype-track-likers.active path,.list-itemtype-ticket .list-itemtype-track-watchers.active path,.list-itemtype-timeline .icon path,.list-itemtype-timeline .list-itemtype-track-likers.active path,.list-itemtype-timeline .list-itemtype-track-watchers.active path,.list-itemtype-user .icon path,.list-itemtype-user .list-itemtype-track-likers.active path,.list-itemtype-user .list-itemtype-track-watchers.active path{fill:currentcolor}@-webkit-keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}.backlog-menu{background:#f5f5f5;color:#212121;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .trans-button{color:#212121;display:inline-block;padding:.4rem 1.5rem}.backlog-menu .trans-button.active,.backlog-menu .trans-button:hover{background:#757575;color:#f5f5f5}.backlog-menu .trans-button.active:hover{background:#c2c2c2}.backlog-menu .trans-button.move-to-current-sprint{display:none}.invitation-main,.invitation-main .invitation-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-menu .button-bulk{margin-left:.2rem}.invitation-main{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;-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;background-size:cover;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;z-index:999}.invitation-main .invitation-form .forgot-pass{font-size:.9rem}.invitation-main .avatar .person-name,.invitation-main .invitation-text,.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-weight:100;font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.invitation-main .invitation-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar .person-name{color:#fff}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{color:#fff;text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{color:#f5f5f5;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header,.invitation-main .register-text{color:#fff}.invitation-main .login-form,.invitation-main .register-form{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .register-text a{color:#000}.invitation-main .button-auth{display:block}.error-main,.kanban{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.invitation-main .button-blackish:hover{background:#000}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.issues .filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:260px}.issues .filters-inner{opacity:1;padding:1rem}.kanban{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px)}.kanban header{min-height:70px}.kanban .burndown-container{display:none}.error-main{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.taskboard-inner,.us-story-main-data header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table,.taskboard-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal}.error-main .error-container{color:#fff;-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff;margin-bottom:3rem}.error-main a{color:#000}.error-main a:hover{color:#212121}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.taskboard-inner{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.team h2{margin:1rem 0}.team h2 span:last-child{color:#000}.us-story-main-data .us-title .block-desc-container,.us-story-main-data .us-title .us-related-task{font-size:.9rem}.us-story-main-data .us-title,.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{font-size:1.2rem}.blocked-warning .blocked,.blocked-warning .icon,.issue-nav a,.us-story-main-data .us-title .us-name,.us-story-main-data .us-title .us-number{font-size:2rem}.blocked-warning .blocked,.us-story-main-data .us-title .us-number{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.us-story-main-data .us-title{font-weight:400;font-family:opensans-regular,Arial,Helvetica,sans-serif}.us-story-main-data .us-title .block-description-title,.us-story-main-data .us-title.blocked .unblock{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.us-story-main-data{margin-bottom:2rem}.us-story-main-data header{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.us-story-main-data .us-title{background:#f5f5f5;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked{background:#ff2400;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked .us-title-text,.us-story-main-data .us-title.blocked input{margin-bottom:.5rem}.us-story-main-data .us-title.blocked .us-name,.us-story-main-data .us-title.blocked .us-number,.us-story-main-data .us-title.blocked .us-related-task{color:#fff}.us-story-main-data .us-title.blocked a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title.blocked a:hover{color:#ff0062}.us-story-main-data .us-title.blocked .unblock{color:#fff;float:right}.us-story-main-data .us-title.blocked .unblock:hover{color:#ff0062;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title p{margin-bottom:0}.us-story-main-data .us-title .us-edit-name-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.us-story-main-data .us-title .edit-subject{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.basic-table,.us-story-main-data .us-title .us-title-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.us-story-main-data .us-title input{background:#fff;-webkit-box-flex:9;-webkit-flex-grow:9;-ms-flex-positive:9;flex-grow:9}.us-story-main-data .us-title .save-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.us-story-main-data .us-title .us-title-text{-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;display:flex;margin-bottom:0;max-width:94%}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{max-height:1.5rem;max-width:1.5rem}.us-story-main-data .us-title .us-title-text:hover .icon-edit{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.us-story-main-data .us-title .us-number{color:#f5f5f5;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;line-height:2.2rem;margin-right:.5rem}.us-story-main-data .us-title .us-name{color:#212121;display:inline-block;line-height:2.2rem;padding-right:1rem;width:100%}.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{color:#f5f5f5;margin-left:.5rem}.us-story-main-data .us-title .icon-edit{opacity:0}.us-story-main-data .us-title .us-related-task{color:#f5f5f5;margin-top:.5rem}.us-story-main-data .us-title .us-related-task a{border-left:1px solid #f5f5f5;padding:0 .2rem}.us-story-main-data .us-title .us-related-task a:hover{color:#000}.us-story-main-data .us-title .us-related-task a:first-child{border:0}.us-story-main-data .us-title .block-description-title{color:#fff;margin-right:.5rem}.us-story-main-data .us-title .block-description{color:#fff;display:inline-block;margin-right:5rem}.blocked-warning{margin-bottom:1rem}.blocked-warning .blocked{color:#ff2400;line-height:2.5rem;margin-bottom:.5rem}.blocked-warning .block-description{color:#212121;margin:0}.duty-content .edit-description,.wiki-content,.wysiwyg{margin-bottom:2rem}.issue-nav{position:absolute;right:1rem;top:1rem}.duty-content{position:relative}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#212121}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#f5f5f5}.duty-content textarea{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-content .edit{color:#212121}.duty-content .view-description .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .save{top:.4rem}.duty-content .edit-description .edit{position:absolute;right:2.5rem;top:.4rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.wysiwyg textarea{background:#fff;max-height:none}.wiki .remove{font-size:.9rem;color:#f5f5f5}.wiki .remove:hover span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove:hover .icon{color:#ff2400;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove .icon{color:#f5f5f5;margin-right:.2rem}.wiki-content{position:relative}.wiki-content.editable:hover .wysiwyg{background:#f5f5f5;cursor:pointer}.wiki-content .view-wiki-content:hover .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .view-wiki-content .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .icon:hover{color:#212121;opacity:.3;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .preview-icon{position:absolute;right:3.5rem}.wiki-content .edit-wiki-content .action-container{position:absolute;right:1rem;top:.3rem}.wiki-content .edit-wiki-content .edit{position:absolute;right:3.5rem;top:.4rem}.wiki-content .preview{padding-top:1.8rem}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row,.card-placeholder .placeholder-avatar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table .row,.empty-burndown,.loading-bar{-webkit-box-orient:horizontal}.basic-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:flex;-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;padding:.3rem 0;text-align:left;width:100%}.basic-table .row .width-1{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:4;-webkit-flex-grow:4;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:5;-webkit-flex-grow:5;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:7;-webkit-flex-grow:7;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.beta{left:0;position:absolute;top:0;z-index:9999}.button,.button-auth,.button-blackish,.button-bulk,.button-gray,.button-green,.button-red,.trans-button,a.button-gray,a.button-green{font-weight:100;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:0 0;border:0;color:#fff;cursor:pointer;display:inline-block;padding:.4rem 2rem;text-align:center;text-transform:uppercase;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.trans-button{font-size:1rem}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button:hover,.trans-button:hover{color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.trans-button span{-webkit-animation:loading .5s linear;animation:loading .5s linear}.button span,.button-auth span,.button-blackish span,.button-bulk span,.button-gray span,.button-green span,.button-red span,.trans-button span{color:#fff}.button .icon,.button-auth .icon,.button-blackish .icon,.button-bulk .icon,.button-gray .icon,.button-green .icon,.button-red .icon,.trans-button .icon{color:#fff;margin-right:.3rem}.trans-button .icon,.trans-button span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}.trans-button.active .icon,.trans-button.active span,.trans-button:hover .icon,.trans-button:hover span{color:#000}.trans-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#000}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#212121;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#212121;color:#fff}.button-blackish{background:#212121;color:#f5f5f5}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff0062}.button-red:hover{background:#ff2400;color:#fff}.button-red .icon{color:#fff}.button-block{background:#fff;color:#ff2400}.button-block:hover{background:#ff0062;color:#fff}.button-bulk{background:#000;padding:.35rem .5rem}.button-bulk .icon{margin-right:0}.button-auth,.button-bulk:hover{background:#212121}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.card-placeholder{background:#f0f0f0;border:1px dashed #e1e1e1;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:flex}.card-placeholder .image{background:#e1e1e1;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.card-placeholder .line{background:#e1e1e1;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#dcdcdc;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:500px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.check input+div{background-color:#757575;height:25px;-webkit-transition:all .2s linear;transition:all .2s linear;width:50%}.check input~.check-text{font-weight:400;font-size:.9rem;font-family:opensans-regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#212121;margin-left:50%;-webkit-transition:all .2s linear;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.single-filter,.ticket-created-by .created-by .created-title.editable{cursor:pointer}.check input:disabled+div{background-color:#f5f5f5}.ticket-created-by{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;margin-top:.5rem;position:relative}.ticket-created-by .user-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-weight:100;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;line-height:1.5}.ticket-created-by .created-by .created-title{color:#000}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover,.ticket-estimation .popover a,.ticket-estimation .popover.fix,.ticket-estimation .popover.fix a,.ticket-estimation .ticket-role-points .role{font-size:.9rem}.ticket-estimation .ticket-role-points .points{font-weight:400;font-size:1.6rem}.ticket-estimation .points-per-role{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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}.ticket-estimation .ticket-role-points{background:rgba(245,245,245,.1);border-radius:2px;color:rgba(33,33,33,.3);-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:.1rem;padding:.5rem 0 .1rem;position:relative;text-align:center;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .ticket-role-points.active{background:rgba(33,33,33,.9);color:#f5f5f5}.ticket-estimation .ticket-role-points:first-child{background:rgba(33,33,33,.25);border-radius:0;color:#f5f5f5}.ticket-estimation .ticket-role-points:last-child{border:0}.ticket-estimation .ticket-role-points .points{font-family:opensans-regular,Arial,Helvetica,sans-serif;display:block;text-align:center}.ticket-estimation .ticket-role-points .role{max-width:90%;overflow:hidden;display:inline-block;text-align:center}.ticket-estimation .popover{background:#212121;color:#fff;display:none;left:35%;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover a{border-bottom:1px solid #212121;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;content:'';height:10px;left:10px;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#212121;color:#fff}.ticket-estimation .popover.fix{background:#212121;color:#fff;display:none;left:-160px;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover.fix a{border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;content:'';height:10px;left:90%;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.single-filter{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem;opacity:.5;position:relative}.single-filter:after{clear:both;content:'';display:table}.single-filter.active,.single-filter.selected,.single-filter:hover{color:#212121;opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{background:#dcdcdc;display:block;width:100%}.single-filter .number{background:#c2c2c2;position:absolute;right:0;top:0}.single-filter .icon-delete{color:#212121;position:absolute;right:.5rem;top:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.single-filter .icon-delete:hover{color:#ff2400;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task .task-name{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.kanban-task .avatar a,.kanban-task .task-text,.kanban-task-maximized .task-archived p,.kanban-task-maximized .task-points,.kanban-task-minimized .task-archived{font-size:.9rem}.kanban-task-minimized .icon-drag-h{font-size:1rem}.kanban-task .icon-drag-h,.kanban-task .icon-edit{font-size:1.2rem}.kanban-task{background:#F0EFD1;border:1px solid #000;box-shadow:none;cursor:move;margin:.2rem;position:relative}.kanban-task:last-child{margin-bottom:0}.kanban-task:hover .icon-drag-h,.kanban-task:hover .icon-edit{color:#000;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.kanban-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.kanban-task.ui-sortable-placeholder{background:#212121}.kanban-task.blocked{background:#ff2400;border:1px solid #cc1d00;color:#fff}.kanban-task.blocked a,.kanban-task.blocked span{color:#fff}.kanban-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.kanban-task .kanban-tagline{border-color:#000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:.6rem}.kanban-task .kanban-tag{border-top:.3rem solid #000;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.kanban-task .kanban-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.kanban-task .avatar-wrapper{-webkit-flex-basis:55px;-ms-flex-preferred-size:55px;flex-basis:55px;-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;width:55px}.kanban-task .avatar-wrapper img{width:100%}.kanban-task .avatar a{text-align:center}.kanban-task .avatar img{margin:0 auto}.kanban-task .avatar img:hover{border:2px solid #000;-webkit-transition:border .3s linear;transition:border .3s linear}.kanban-task .task-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 .5rem 0 .8rem}.kanban-task .task-assigned{color:#000;display:block}.kanban-task .task-num{color:#212121;margin-right:.3rem}.kanban-task .loading{bottom:.5rem;position:absolute}.kanban-task .icon-drag-h,.kanban-task .icon-edit{color:#000;opacity:0;position:absolute;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.kanban-task .icon-drag-h:hover,.kanban-task .icon-edit:hover{color:#000;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task-maximized .task-archived{background:#e8e8e8;padding:.5rem;text-align:left;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived:hover{background:#e1e1e1;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-maximized .task-archived span{color:#f5f5f5}.kanban-task-maximized .task-archived p{color:#f5f5f5;margin:0}.kanban-task-maximized .task-archived p:last-child{color:#757575;margin:.5rem 0;text-align:center}.kanban-task-maximized .icon-edit,.kanban-task-maximized .loading{bottom:.2rem;right:.5rem}.kanban-task-maximized .icon-drag-h{font-size:2rem;bottom:.2rem;cursor:move;right:45%}.kanban-task-maximized .task-points{color:#000;margin:0}.kanban-task-maximized .task-points span{display:inline-block}.kanban-task-maximized .task-points span:first-child{padding-right:.2rem}.kanban-task-maximized .task-points .points-text{text-transform:lowercase}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{line-height:1.4;text-transform:none}.kanban-task-maximized .kanban-tag{border-top:.3rem solid}.kanban-task-minimized .kanban-task-inner{padding:0 .3rem}.kanban-task-minimized .task-archived{background:#e8e8e8;padding:.3rem;text-align:left}.kanban-task-minimized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-minimized .task-archived span{color:#f5f5f5}.kanban-task-minimized .task-archived .task-name{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-itemtype-project .icon svg,.list-itemtype-ticket .icon svg,.list-itemtype-timeline .icon svg,.list-itemtype-user .icon svg,.loading-spinner{max-height:1rem;max-width:1rem}.kanban-task-minimized .task-archived p{color:#f5f5f5;margin:0}.kanban-task-minimized .task-archived p:last-child{display:none}.kanban-task-minimized .task-num{vertical-align:top}.kanban-task-minimized .task-name{display:inline-block;overflow:hidden;width:135px}.kanban-task-minimized .task-points{display:none}.kanban-task-minimized .icon-drag-h,.kanban-task-minimized .icon-edit{top:1.4rem}.kanban-task-minimized .icon-edit{bottom:.2rem;right:1rem}.kanban-task-minimized .icon-drag-h{cursor:move;right:.1rem;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-task-minimized .kanban-tag{border-top:.2rem solid}.level{background-color:#f5f5f5;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project p,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user .extra-info,.list-itemtype-user p{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{font-weight:400;font-family:opensans-regular,Arial,Helvetica,sans-serif}.list-itemtype-project .list-itemtype-track,.list-itemtype-ticket .list-itemtype-track,.list-itemtype-timeline .list-itemtype-track,.list-itemtype-user .extra-info,.list-itemtype-user .list-itemtype-track{font-size:.9rem}.list-itemtype-ticket h2{font-size:1rem}.list-itemtype-project h2,.list-itemtype-user h2,.loader p{font-size:1.2rem}.list-itemtype-project{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#000}.list-itemtype-project h2,.list-itemtype-project p{margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-project-members,.list-itemtype-project .list-itemtype-project-tags{-webkit-align-self:flex-end;-ms-flex-item-align:end;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .list-itemtype-project-members{align-self:flex-end;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-project .list-itemtype-project-tags{align-self:flex-end;display:flex;-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5rem}.list-itemtype-project .tag{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket h2,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user h2,.list-itemtype-user p{margin-bottom:0}.list-itemtype-ticket,.list-itemtype-timeline,.list-itemtype-user{border-bottom:1px solid #f5f5f5;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user,.list-itemtype-user .list-itemtype-track{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#000}.list-itemtype-ticket .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .list-itemtype-avatar img{width:100%}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-project{color:#f5f5f5}.list-itemtype-ticket .list-itemtype-ticket-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-id{color:#f5f5f5;margin-right:.3rem}.list-itemtype-user{display:flex}.list-itemtype-user .list-itemtype-track{color:#f5f5f5;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#000}.list-itemtype-user .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .list-itemtype-avatar img{width:100%}.list-itemtype-user .extra-info{margin-top:.25rem}.list-itemtype-timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-timeline .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-timeline .list-itemtype-track-likers,.list-itemtype-timeline .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track-likers .icon,.list-itemtype-timeline .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-timeline .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-timeline .list-itemtype-track-likers.active,.list-itemtype-timeline .list-itemtype-track-watchers.active{color:#000}.list-itemtype-timeline h2{margin-bottom:0}.admin-menu li,.empty-backlog .title,.empty-burndown .title,.sprints-empty .title,.taskboard-table-header .task-colum-name,.ticket-data .ticket-title,.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,tg-project-menu{text-transform:uppercase}.list-itemtype-timeline .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.loader p{color:#757575;text-align:center}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar,.notification-light{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.loading-bar{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:loadBar;animation-name:loadBar;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;background:#757575;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{-webkit-animation-delay:0s;animation-delay:0s;background:#ffc107}.loading-bar .item-1{-webkit-animation-delay:1s;animation-delay:1s;background:#009688}.loading-bar .item-2{-webkit-animation-delay:2s;animation-delay:2s;background:#e91e63}.loading-bar .item-3{-webkit-animation-delay:3s;animation-delay:3s;background:#9c27b0}.loading-bar .item-4{-webkit-animation-delay:4s;animation-delay:4s;background:#cddc39}.loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}a.help-button,a.help-markdown{font-size:.9rem;color:#f5f5f5}a.help-button:hover .icon,a.help-button:hover span,a.help-markdown:hover .icon,a.help-markdown:hover span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button .icon,a.help-markdown .icon{color:#f5f5f5;margin-right:.2rem}.markItUpHeader ul{background:#f5f5f5;padding:.3rem}.markItUpHeader ul li{display:inline-block;float:none}.markItUpHeader ul li a{opacity:.8}.markItUpHeader ul li a:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.markItUpHeader ul .preview-icon{position:absolute;right:2.5rem}.markItUpContainer{padding:0}.markdown{position:relative}.preview .actions{background:#f5f5f5;margin-top:.5rem;min-height:2rem;padding:.3rem}.notification-light p{font-weight:100;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.notification-message-success .warning{font-size:1.2rem;color:#fff;line-height:1.2}.notification-message-error .warning{font-size:2rem;color:#fff;line-height:2.4rem}.notification-message-error .icon-notification-error{font-size:3rem;display:inline;vertical-align:sub}.notification-message-error .warning,.notification-message-success .warning{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.notification-message-success{background:rgba(33,33,33,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);opacity:1;right:-370px;top:2%;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{-webkit-animation:animSlide 2s linear both;animation:animSlide 2s linear both;opacity:1}.notification-message-success p{margin:0}@-webkit-keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-light,.notification-message-error{-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%)}.notification-message-error{background:rgba(255,36,0,.9);top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error.inactive{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-light p,.notification-message-error .text p{margin:0}.notification-message-error .icon-delete{color:#fff;position:absolute;right:1rem;top:1rem}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(245,245,245,.95);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;padding:1rem;position:absolute;top:0;transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s;width:100%;z-index:99999}.paginator ul,.summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.notification-light.inactive{opacity:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s}.notification-light.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s;transition:all .6s}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{margin-right:1rem;width:2rem}.notification-light .close path{fill:#fff}.notification-message-light-error{background:rgba(255,36,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator .dots,.paginator a{background:#f5f5f5;color:#fff;padding:.5rem 1rem;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .active span,.paginator a:hover{background:#212121}.paginator a:hover{color:#fff;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .dots{background:0 0;color:#f5f5f5}.v-pagination-list{overflow:hidden}.v-pagination-next,.v-pagination-previous{background-color:#757575;color:#f5f5f5;display:block;padding:.1rem 0;text-align:center;visibility:hidden;width:100%}.select-color,.select-color:after{background:#212121;position:absolute}.v-pagination-next:hover,.v-pagination-previous:hover{background-color:#212121;-webkit-transition:background .3s linear;transition:background .3s linear}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.private{display:inline-block;margin-left:.5rem;width:.5rem}.private svg{height:.5rem;width:.5rem}.private path{fill:#f5f5f5;-webkit-transition:fill .3s linear;transition:fill .3s linear}.select-color{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;border-radius:0 10px 10px 0;padding:15px}.select-color,.select-color a{font-size:.9rem}.select-color input{font-weight:400;font-size:1rem}.select-color a{border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#f5f5f5;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background-color:#f5f5f5;width:243px}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#f5f5f5;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.empty-burndown,.empty-burndown .title,.summary .description{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.empty-burndown a,.summary .number{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.summary .description{font-size:.9rem}.empty-burndown .title{font-size:1.2rem}.summary{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;padding:1em}.summary .summary-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#212121}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{line-height:1}.summary .stats{cursor:pointer;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .color-line,.summary .stats:hover .graph{fill:#212121;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats.active .color-line,.summary .stats.active .white-line{display:none}.summary .stats.active .graph{fill:#000}.summary .stats svg{height:100%;width:100%}.summary .stats .color-line,.summary .stats .graph{fill:#c2c2c2;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats .white-line{fill:#212121}.empty-burndown path,.track-button.active .track-icon path{fill:#000}.summary .stats .color-line,.summary .stats .white-line{display:block}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#212121;height:24px}.summary-progress-bar .defined-points{background:#ff0062;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#212121;height:24px;position:absolute}.large-summary{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.large-summary .large-summary-wrapper{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.large-summary .summary-progress-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.empty-burndown,.taskboard-task .taskboard-tagline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.large-summary .summary-progress-bar{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats-divider{margin-right:2rem}.large-summary .icon{font-size:1.4rem;margin-right:.4rem}.large-summary .icon.icon-stats{color:#000;float:right;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#212121}.large-summary .icon.icon-stats.active:hover{color:#000;-webkit-transition:color .3s linear;transition:color .3s linear}.empty-burndown{-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;background:rgba(0,0,0,.15);display:flex;-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;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{-webkit-flex-basis:5rem;-ms-flex-preferred-size:5rem;flex-basis:5rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;width:5rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.empty-burndown .title{color:#000;margin:0}.empty-burndown a{-webkit-animation:blink 2s infinite;animation:blink 2s infinite}.graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.wysiwyg,.wysiwyg .codehilite{overflow:auto}.graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;-webkit-transition:none;transition:none}.tag{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-radius:0 5px 5px 0;color:#212121;display:inline-block;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.tag,.tags-block .add-tag-text,.tags-block .tag{font-size:.9rem}.tags-block .icon-plus{font-size:1.2rem}.tag .icon-delete{color:#f5f5f5;margin-left:1rem}.tag .icon-delete:hover{color:#ff2400}.ui-autocomplete{background:#fff;border:1px solid #f5f5f5;z-index:99910}.ui-autocomplete .ui-state-focus{background:#212121}.ui-autocomplete li{cursor:pointer}.ui-helper-hidden-accessible{display:none}.tags-block .tags-container{display:inline-block}.tags-block input{padding:.4rem;width:14rem}.tags-block .tag{margin:0 .5rem .5rem 0;padding:.5rem}.tags-block .add-tag{color:#f5f5f5}.tags-block .add-tag:hover{color:#212121}.taskboard-task .task-name{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.taskboard-task .task-assigned,.taskboard-task .taskboard-text,.taskboard-task .taskboard-user-avatar a{font-size:.9rem}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit,.taskboard-task .icon-iocaine{font-size:1.2rem}.taskboard-task{background:#F0EFD1;border:1px solid #000;box-shadow:none;cursor:move;margin:.2rem;position:relative}.taskboard-task:hover .icon-drag-h,.taskboard-task:hover .icon-edit{color:#000;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.taskboard-task.ui-sortable-placeholder{background:#212121}.taskboard-task.blocked{background:#ff2400;border:1px solid #cc1d00;color:#fff}.taskboard-task.blocked a,.taskboard-task.blocked span,.taskboard-task.blocked:hover .icon-drag-h,.taskboard-task.blocked:hover .icon-edit{color:#fff}.taskboard-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.taskboard-task .taskboard-tagline{border-color:#000;display:flex;height:.6rem}.taskboard-task .taskboard-tag{border-top:.3rem solid #000;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.taskboard-task .taskboard-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.taskboard-task .taskboard-user-avatar{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:55px}.taskboard-task .taskboard-user-avatar a{display:block;text-align:center}.taskboard-task .taskboard-user-avatar img{margin:0 auto}.taskboard-task .taskboard-user-avatar img:hover{border:2px solid #000;-webkit-transition:border .3s linear;transition:border .3s linear}.taskboard-task .iocaine img{-webkit-filter:hue-rotate(150deg) saturate(200%);filter:hue-rotate(150deg) saturate(200%)}.taskboard-task .icon-iocaine{background:#000;border-radius:5px;color:#fff;left:.2rem;padding:.1rem;position:absolute;top:1rem}.taskboard-task .task-assigned{color:#000;display:block}.taskboard-task .task-assigned:hover{color:#000}.taskboard-task .task-num{color:#212121;margin-right:.5em}.taskboard-task .taskboard-text{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;padding:0 .5rem 0 1rem;word-wrap:break-word}.taskboard-task .icon{-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task .loading{bottom:.5rem;position:absolute}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit{bottom:.5rem;color:#000;opacity:0;position:absolute}.taskboard-task .icon-drag-h:hover,.taskboard-task .icon-edit:hover{color:#000}.taskboard-task .icon-edit,.taskboard-task .loading{right:1rem}.taskboard-task .icon-drag-h{font-size:2rem;cursor:move;right:45%}.task-drag{box-shadow:1px 1px 15px 6px rgba(0,0,0,.1)}.watch-options a{font-weight:100}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.track-button .track-inner{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border-radius:4px 0 0 4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;margin-right:.1rem;min-width:140px}.track-button .track-button-counter,.watch-options a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.track-button .track-inner:hover{background:#e8e8e8;-webkit-transition:background .3s;transition:background .3s}.track-button .track-inner span{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.track-button .track-inner .icon-arrow-up{margin-left:auto;padding:0 .5rem;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.track-button:hover{color:#212121}.track-button.active .track-inner{background:rgba(33,33,33,.2)}.track-button.watch-container{margin-right:1rem;position:relative}.track-button .track-icon{padding:.3rem .6rem .3rem .75rem}.track-button .track-icon svg{height:1.1rem;position:relative;top:2px;width:1.1rem}.track-button .track-icon path{fill:#212121}.track-button .track-button-counter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-width:2rem}.like-button.active.is-hover .track-inner,.watch-button.active.is-hover .track-inner{background:#ff2400;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.like-button.active.is-hover path,.watch-button.active.is-hover path{fill:#ff0062}.watch-options{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.admin-project-export-result .spin img,.ticket-assigned-to .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.watch-options li{margin:0}.assigned-to-list,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(245,245,245,.3);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.watch-options a.active{color:#212121}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check path{fill:#212121}.upvote-btn a.active path,.upvote-btn a:hover path{fill:#000}.upvote-btn{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#f5f5f5;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#000;-webkit-transition:background .3s;transition:background .3s}.upvote-btn a.active{background:rgba(33,33,33,.2);color:#000;-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover{background:#ff2400;color:#f5f5f5}.upvote-btn a.is-hover svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover path{fill:#ff0062}.sprints .add-sprint path,.upvote-btn path{fill:#f5f5f5}.upvote-btn svg{height:1rem;width:1rem}.upvote-btn span{display:block}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name{color:#212121;margin-left:.5rem}.assigned-to-list .user-list-single,.ticket-watchers .user-list-single{-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;background:0 0;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem .5rem .3rem;vertical-align:middle}.assigned-to-list .user-list-single:last-child,.ticket-watchers .user-list-single:last-child{border:0}.assigned-to-list .user-list-avatar,.ticket-watchers .user-list-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.assigned-to-list .user-list-single:hover{background:#949494;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{background:#8c8c8c;cursor:pointer;margin-bottom:1rem;position:relative;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.1s;transition-delay:.1s}.assigned-to-list .user-list-single.is-active .icon-delete{opacity:1;position:absolute;right:1rem;top:1.3rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-single:hover .icon-delete{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.ticket-watchers .icon-delete{opacity:0;position:absolute;right:.5rem;top:0;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.ticket-watchers .icon-delete:hover{color:#ff2400;-webkit-transition:color .3s ease-in;transition:color .3s ease-in}.wysiwyg code,.wysiwyg pre{font-size:.9rem}.wysiwyg h2{font-size:1.2rem;margin-bottom:.5rem}.wysiwyg h1{font-weight:400;font-size:2rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.wysiwyg h2,.wysiwyg h3{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.wysiwyg{line-height:1.4rem;padding:1rem}.wysiwyg h1{line-height:2.5rem}.wysiwyg ol,.wysiwyg ul{list-style-position:outside;margin-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;font-weight:700;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#000}.wysiwyg a:hover{color:#212121}.wysiwyg p{line-height:1.4rem;margin-bottom:1rem}.wysiwyg code,.wysiwyg pre{background:#3b3b3b;color:#f5f5f5;direction:ltr;font-family:'courier new',monospace;margin-bottom:1rem;overflow:auto;unicode-bidi:embed;white-space:pre}.admin-functionalities .functionality .title,.admin-membership-table .avatar .name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-membership-table .avatar figcaption span,.admin-submenu ul a span,.admin-submenu-roles .single-role,.admin-webhooks .webhook-url span,.custom-fields-table .custom-description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wysiwyg pre{line-height:1.4rem;padding:.5rem}.wysiwyg table{border:1px solid #f5f5f5;margin-bottom:1rem}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#f5f5f5 1px solid}.wysiwyg th{border-right:#f5f5f5 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#f5f5f5 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.admin-common .total{font-size:1.2rem;background-color:#f5f5f5;color:#444;padding:.3rem 1rem}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{margin-bottom:2rem}.admin-common .total:hover .edit-value{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0;padding:.5rem 0}.custom-fields-table .table-header{border-bottom:3px solid #f5f5f5}.custom-fields-table .table-header .custom-description span,.custom-fields-table .table-header .custom-name span{padding-left:1.1rem}.custom-fields-table .table-body form:last-child .row{border:0}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;-webkit-transition:background .2s linear;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag-v{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .table-body .custom-description{color:#b8b8b8}.custom-fields-table .single-custom-field{border-bottom:1px solid #f5f5f5;color:#555}.custom-fields-table .icon-drag-v{color:#b8b8b8;opacity:0;padding:0 .1rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .icon-drag-v:hover{color:#555;cursor:move;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{color:#555;margin-right:.5rem}.custom-fields-table .custom-name{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-description{max-width:100%;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.custom-fields-table .custom-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-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;opacity:0;text-align:center}.custom-fields-table .custom-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-fields-table form .custom-options-wrapper{opacity:1}.admin-functionalities form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.admin-functionalities .functionality{-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;background-color:#f5f5f5;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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.3rem;margin-right:.3rem;opacity:.5;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:top;width:32%}.admin-functionalities .functionality.active{background-color:rgba(114,161,20,.3);opacity:1}.admin-functionalities .functionality .icon{font-size:3rem;-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;margin:0 auto;min-width:60px}.admin-functionalities .functionality .desc{text-align:center;width:100%}.admin-functionalities .functionality .activate-input{display:none}.admin-functionalities .functionality .activate-input+label{color:#fff;cursor:pointer;display:block;text-align:center}.admin-functionalities .functionality .title{display:block}.admin-functionalities .functionality select{margin-top:1rem}.admin-functionalities .videoconference-attributes select{margin-bottom:.5rem}.admin-functionalities .button-green{color:#fff;display:block;text-align:center}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .delete,.admin-menu li{font-size:1.2rem}.admin-membership-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.admin-membership-table .avatar figcaption{margin-left:1rem;width:75%}.admin-membership-table .avatar figcaption span{width:100%}.admin-membership-table .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:35px}.admin-membership-table .avatar .email,.admin-membership-table .avatar .name{display:block;width:100%}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#f5f5f5}.admin-membership-table .resend{background-color:#72a114;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;-webkit-transition:background-color .3s linear;transition:background-color .3s linear}.admin-membership-table .delete:hover{color:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.admin-menu li{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #dcdcdc}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-result .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{width:100%}.admin-project-export-result h3{font-size:1.2rem;font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#b8b8b8;margin:.5rem 0;text-align:center}.project-details .privacy-settings label,.project-details input,.project-details label,.project-details textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.project-details form{max-width:700px;width:100%}.project-details fieldset{margin-bottom:1rem}.project-details label{display:block;margin-bottom:.2rem}.project-details textarea{height:10rem}.project-details .privacy-settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.project-details .privacy-settings>div{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;position:relative}.project-details .privacy-settings>div:first-child{margin-right:.5rem}.project-details .privacy-settings label{border:1px solid #b8b8b8;cursor:not-allowed;display:block;text-align:center;-webkit-transition:all .2s linear;transition:all .2s linear}.project-details .privacy-settings label span{color:#b8b8b8}.project-details .privacy-project{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.project-details .privacy-project:checked+label{background:#9dce0a;border:1px solid #9dce0a}.project-details .privacy-project:checked+label span{color:#fff}.project-details .button-green{color:#fff;display:block;text-align:center}.project-details .delete-project{font-size:.9rem;display:block;margin-top:1rem}.admin-roles .general-category{font-size:.9rem}.admin-roles .edit-value{font-size:1rem}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-roles .edit-value{color:#b8b8b8;cursor:pointer;margin-left:.5rem;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-roles .edit-role{background-color:#f5f5f5;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .edit-role .icon-floppy{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .edit-role .icon-floppy:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;display:inline-block}.admin-submenu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.admin-contrib .help .alt-image,.admin-contrib .help code,.admin-contrib .select-input-text .help-copy,.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-body span,.admin-webhooks .history-single-response-header a{font-size:.9rem}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a span{display:block;max-width:85%}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child,.admin-webhooks .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body .response-container,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-webhooks .table-header{border-bottom:1px solid #b8b8b8}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #f5f5f5}.admin-webhooks .webhooks-options{margin-bottom:1rem;text-align:right}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.admin-webhooks .webhook-url{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.admin-webhooks .webhook-url span{max-width:65%;color:#b8b8b8;display:inline-block;vertical-align:middle}.admin-contrib .help code,.admin-third-parties .help code{direction:ltr;line-height:1.4rem;unicode-bidi:embed;white-space:pre}.admin-webhooks .webhook-url a{color:#72a114;margin-left:.5rem}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;min-width:100px;text-align:center}.admin-webhooks .webhook-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.admin-webhooks .webhook-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .webhooks-history.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #f5f5f5;margin-left:22%}.admin-webhooks .history-single{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header a,.admin-webhooks .history-single-response-header span:first-child{color:#b8b8b8}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{-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;background:#f5f5f5;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-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.backlog-table-body,.backlog-table-header,.kanban-table,.taskboard-table,.wiki-summary .wiki-user-modification{-webkit-box-orient:vertical;-webkit-box-direction:normal}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{color:#b8b8b8;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{border:0;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib h2,.admin-contrib label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.admin-contrib .help h3,.admin-contrib .help ol span{font-family:opensans-semibold}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #f5f5f5;margin-bottom:1rem;padding-bottom:1rem}.admin-contrib .contrib-input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.admin-contrib .contrib-test{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:7.5rem;-ms-flex-preferred-size:7.5rem;flex-basis:7.5rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-left:.5rem;text-align:center}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .contrib-form-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-contrib .select-input-text .help-copy{opacity:0}.admin-contrib .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-contrib .check-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0}.admin-contrib .help{margin-top:2rem}.admin-contrib .help h3{margin-bottom:1rem}.admin-contrib .help ol{padding:0 0 0 2rem}.admin-contrib .help .img{margin-bottom:1rem}.admin-contrib .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-contrib .help .code-info{padding-left:1rem}.admin-contrib .help .code-info li{margin-bottom:.5rem}.admin-contrib .help .code-info span{font-family:opensans-semibold}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv .csv-regenerate-field a{font-size:.9rem;min-width:110px}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field .icon{margin-right:.3rem}.project-csv .field-with-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:1rem;width:100%}.project-csv .field-with-options input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row .icon,.project-values-settings a{font-size:1.2rem}.admin-third-parties .help .alt-image,.admin-third-parties .help code,.admin-third-parties .select-input-text .help-copy,.backlog-table-body .doom-line span,.backlog-table-body .pop-points,.backlog-table-body .pop-points a,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open a,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-body .pop-role,.backlog-table-body .pop-role a,.backlog-table-body .pop-status,.backlog-table-body .pop-status a,.backlog-table-body .row,.backlog-table-body .tags-block .tag,.backlog-table-header .pop-points,.backlog-table-header .pop-points a,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open a,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom a,.backlog-table-header .pop-role,.backlog-table-header .pop-role a,.backlog-table-header .pop-status,.backlog-table-header .pop-status a,.backlog-table-header .row,.login-form-container .forgot-pass,.register-form-container .register-text{font-size:.9rem}.project-values-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{color:#b8b8b8;opacity:0}.project-values-row .icon:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.project-values-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #f5f5f5}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-header .points,.login-form-container .remember-me+label{cursor:pointer}.project-values-body .project-values-row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.project-values-name{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.project-values-value{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{color:#555;margin-right:.5rem}.project-values-settings a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.project-values-settings a:hover .icon-delete{color:red}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.admin-third-parties .help h3,.admin-third-parties .help ol span{font-family:opensans-semibold}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p,.change-password-text{color:#444;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-third-parties .help{margin-top:2rem}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties .help h3{margin-bottom:1rem}.admin-third-parties .help ol{padding:0 0 0 2rem}.admin-third-parties .help .img{margin-bottom:1rem}.admin-third-parties .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-third-parties .help .code-info li,.cancel-account p{margin-bottom:.5rem}.admin-third-parties .help .code-info{padding-left:1rem}.admin-third-parties .help .code-info span{font-family:opensans-semibold}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-email-form p{margin-bottom:.5rem}.change-password-form-container .token-change-password{position:relative}.change-password-form-container input:focus+.get-token{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.change-password-form-container .get-token{font-size:.9rem;color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.change-password-form-container .get-token:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.login-form-container .forgot-pass{color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;-webkit-transition:all .3s linear;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.login-form-container .remember-me{vertical-align:top}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin-bottom:1rem;text-align:center}.backlog-table-header .backlog-table-title{font-size:1rem}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a,.empty-backlog .title{font-size:1.2rem}.backlog-table-body .doom-line span{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.backlog-table-body .pop-points,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-body .user-story-name a,.backlog-table-header .pop-points,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-role,.backlog-table-header .pop-status,.empty-backlog{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.backlog-table-body,.backlog-table-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-subtitle:hover,.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-subtitle:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-subtitle .input,.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-subtitle .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-webkit-flex-basis:25px;-ms-flex-preferred-size:25px;flex-basis:25px;-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}.backlog-table-body .backlog-table-subtitle .votes,.backlog-table-body .backlog-table-title .votes,.backlog-table-body .row .votes,.backlog-table-header .backlog-table-subtitle .votes,.backlog-table-header .backlog-table-title .votes,.backlog-table-header .row .votes{color:#555;-webkit-flex-basis:65px;-ms-flex-preferred-size:65px;flex-basis:65px;-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-align:center}.backlog-table-body .backlog-table-subtitle .votes.inactive,.backlog-table-body .backlog-table-title .votes.inactive,.backlog-table-body .row .votes.inactive,.backlog-table-header .backlog-table-subtitle .votes.inactive,.backlog-table-header .backlog-table-title .votes.inactive,.backlog-table-header .row .votes.inactive{color:#b8b8b8}.backlog-table-body .backlog-table-subtitle .votes.is-voted,.backlog-table-body .backlog-table-title .votes.is-voted,.backlog-table-body .row .votes.is-voted,.backlog-table-header .backlog-table-subtitle .votes.is-voted,.backlog-table-header .backlog-table-title .votes.is-voted,.backlog-table-header .row .votes.is-voted{color:#9dce0a}.backlog-table-body .backlog-table-subtitle .user-stories,.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-subtitle .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{overflow:hidden;width:100%}.backlog-table-body .backlog-table-subtitle .status,.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-subtitle .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-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}.backlog-table-body .backlog-table-subtitle .points,.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-subtitle .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-webkit-flex-basis:125px;-ms-flex-preferred-size:125px;flex-basis:125px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point,.empty-backlog,.sprints .loading,.sprints .sprint-table .sprint-empty{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{color:#b8b8b8;margin-left:.2rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px 3rem 10px 10px;position:absolute;width:150px;z-index:99}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{background:#050505;bottom:0;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:auto;width:200px;z-index:99}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .user-story-name,.sprints .sprint-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:opensans-regular,Arial,Helvetica,sans-serif;border-bottom:2px solid #b8b8b8;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:30px}.backlog-table-header .header-points span{color:#b8b8b8}.backlog-table-body .row{border-bottom:1px solid #ebebeb;cursor:move;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in;-webkit-transition-delay:.2s;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag-v,.backlog-table-body .row:hover .us-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .is-checked,.backlog-table-body .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.backlog-table-body .user-story-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .doom-line{background:red;margin:.2rem 0;padding:.6rem 0;position:relative;width:100%}.backlog-table-body .doom-line span{color:#fff;position:absolute;right:.5rem;top:-3px}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in;width:30px}.backlog-table-body .icon-drag-v:hover,.backlog-table-body .us-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .us-settings{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 0 0 2rem;opacity:0}.backlog-table-body .icon-drag-v{cursor:move;opacity:0;padding:.1rem .5rem 0 0}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.empty-backlog{padding:2rem}.empty-backlog img{margin-bottom:1rem}.empty-backlog .title{margin-bottom:.5rem}.empty-backlog a{color:#72a114}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint .description{font-size:.75rem}.sprints .filter-closed-sprints,.sprints .sprint-table .column-us,.sprints .us-item-row .user-story-name{font-size:.9rem}.sprints .sprint .number,.sprints .sprint .sprint-date,.sprints .sprint-name a,.sprints-empty .title{font-size:1.2rem}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint-header{-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;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#72a114;padding:.25rem .25rem 0;-webkit-transition:background .2s;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading-spinner{border:0;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.sprints .sprint-name a{max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;margin-right:3px}.sprints .sprint{margin-bottom:2rem;overflow:hidden}.sprints .sprint header{position:relative}.sprints .sprint:hover .icon-edit{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.sprints .sprint .icon{display:inline-block}.sprints .sprint .icon-arrow-up{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:baseline}.sprints .sprint .icon-arrow-up.active{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.sprints .sprint .icon-arrow-up:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.sprints .sprint .icon-edit{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;vertical-align:baseline}.sprints .sprint .icon-edit:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.sprints .sprint .description{line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{color:#b8b8b8;-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1}.sprints .sprint .sprint-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.sprints .sprint ul{margin:0}.sprints .sprint li{display:inline-block}.sprints .sprint li:first-child{margin-right:3px}.sprints .sprint-progress-bar{background:#b8b8b8;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#72a114;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table .sprint-empty{background:#e6e6e6;border:2px dashed #d2d2d2;color:#555;padding:1rem}.sprints .sprint-table .row{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:#d7d7d7;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .row.readonly,.taskboard-table .taskboard-task.readonly{cursor:auto}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.sortable-placeholder{background:#d7d7d7;height:40px}.sprints .sprint-table .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .column-us{-webkit-flex-flow:3;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.sprints .sprint-table .us-name.closed{color:#c5c5c5}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#c5c5c5}.sprints .sprint-table .column-points.blocked{color:red}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .icon-drag-v,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input,.taskboard-table-body .column-fold .taskboard-task .icon,.taskboard-table-body .column-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .column-fold .taskboard-task .taskboard-text,.taskboard-table-body .row-fold .taskboard-task .icon,.taskboard-table-body .row-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .row-fold .taskboard-task .taskboard-text{display:none}.sprints .us-item-row .user-story-name{line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#b8b8b8}.sprints-empty a,.taskboard-table-header .task-colum-name .icon:hover{color:#72a114}.sprint-closed .sprint-progress-bar .current-progress{background:#9f9f9f}.sprint-closed .button-gray{background:#b8b8b8}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{margin-bottom:.5rem}.taskboard-userstory-box .points-value{font-size:.9rem}.taskboard-table-header .task-colum-name .icon{font-size:1rem}.taskboard-table-header .task-colum-name,.taskboard-userstory-box .us-title{font-size:1.2rem}.taskboard-table-body .column-fold .taskboard-task,.taskboard-table-body .row-fold .taskboard-task{background:0 0;border:0;margin:0;min-height:0}.taskboard-table-body .column-fold .taskboard-task .taskboard-task-inner,.taskboard-table-body .row-fold .taskboard-task .taskboard-task-inner{padding:.2rem}.taskboard-table-body .column-fold .taskboard-task .avatar,.taskboard-table-body .row-fold .taskboard-task .avatar{height:35px;width:35px}.taskboard-table-body .column-fold .taskboard-task.ui-sortable-helper,.taskboard-table-body .row-fold .taskboard-task.ui-sortable-helper{box-shadow:none}.taskboard-table-body .column-fold .task-column,.taskboard-table-body .row-fold .task-column,.taskboard-table-body .task-column.column-fold,.taskboard-table-body .task-column.row-fold{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;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-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link,.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table,.taskboard-table-header .taskboard-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;overflow:hidden}.taskboard-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%}.taskboard-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:flex;position:absolute}.taskboard-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;width:300px}.taskboard-table-header .task-colum-name:last-child{margin-right:0}.taskboard-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-header .task-colum-name .icon.hfold,.taskboard-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.taskboard-table-header .task-colum-name.column-fold{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table-header .task-colum-name.column-fold span{display:none}.taskboard-table-header .task-colum-name.column-fold .hfold,.taskboard-table-header .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table-body{height:100%;overflow:auto;width:100%}.taskboard-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 10px 0 0;max-width:300px;width:300px}.taskboard-table-body .task-column:last-child{margin-right:0}.taskboard-table-body .column-fold .taskboard-task{max-width:40px;width:40px}.taskboard-table-body .task-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;min-height:10rem;width:100%}.taskboard-table-body .avatar-task-link,.taskboard-table-body .task-row.row-fold .icon-bulk,.taskboard-table-body .task-row.row-fold .icon-plus,.taskboard-table-body .task-row.row-fold .points-value{display:none}.taskboard-table-body .task-row:hover .new-task{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.taskboard-table-body .task-row.blocked .taskboard-userstory-box{background:rgba(255,0,0,.6)}.taskboard-table-body .task-row.blocked .points-value,.taskboard-table-body .task-row.blocked .points-value:hover,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a:hover{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.taskboard-table-body .task-row.blocked .taskboard-tasks-box{background:rgba(255,0,0,.1)}.taskboard-table-body .task-row.row-fold{min-height:0}.taskboard-table-body .task-row.row-fold .us-title{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskboard-table-body .taskboard-userstory-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-table-body .taskboard-userstory-box .icon{color:#b8b8b8;position:absolute;right:.5rem;top:.7rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-body .taskboard-userstory-box .icon:hover{color:#72a114}.taskboard-table-body .taskboard-userstory-box .icon.icon-plus{right:2rem}.taskboard-table-body .taskboard-userstory-box .icon.icon-vfold,.taskboard-table-body .taskboard-userstory-box .icon.icon-vunfold{left:0;right:inherit}.taskboard-table-body .avatar-assigned-to{display:block}.taskboard-userstory-box{position:relative}.taskboard-userstory-box .tag-list{display:none;margin-bottom:1rem}.attachments-header,.ticket-assigned-to{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.taskboard-userstory-box .us-title{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-userstory-box .points-value{color:#b8b8b8}.taskboard-userstory-box .points-value span{margin-right:.1rem}.points-list a{color:#72a114;margin-left:.5rem}.points-list a:hover span{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.points-list span{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem}.ticket-assigned-to{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;margin-bottom:1rem;position:relative}.ticket-assigned-to:hover .assigned-to .icon-delete{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;margin:1rem auto;max-height:2rem;max-width:2rem}.attachments,.duty-custom-fields{margin-bottom:2rem}.ticket-assigned-to .user-avatar{-webkit-flex-basis:4rem;-ms-flex-preferred-size:4rem;flex-basis:4rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .assigned-to{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.attachments-header .attachments-title,.colors-table .table-header,.single-attachment .attachment-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.ticket-assigned-to .assigned-to .user-assigned{font-size:1.2rem;color:#72a114;cursor:default;line-height:1.5rem}.ticket-assigned-to .assigned-to .user-assigned.editable{cursor:pointer}.ticket-assigned-to .assigned-to .user-assigned .icon{vertical-align:middle}.ticket-assigned-to .assigned-to .assigned-name{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ticket-assigned-to .assigned-to .icon-delete{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0}.ticket-assigned-to .assigned-to .icon-delete:hover{color:red}.add-attach span,.more-attachments,.single-attachment,.single-attachment .editable-attachment-comment{font-size:.9rem}.attachments-header .attachments-title{font-size:1rem;color:#444}.attachments-header .icon,.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings,.single-attachment .icon-delete{font-size:1.2rem}.attachments-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.attachments-header .attachments-num,.attachments-header .attachments-text{margin-right:.1rem}.attachments-header .icon{color:#444;cursor:pointer}.attachments-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.single-attachment{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem 1rem;position:relative}.category-config,.more-attachments{border-bottom:1px solid #b8b8b8}.single-attachment:hover .attachment-settings .settings{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.single-attachment.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.single-attachment.deprecated,.single-attachment.deprecated .attachment-name a{color:#b8b8b8}.single-attachment.sortable-placeholder{background:#f5f5f5;height:40px}.single-attachment .attachment-name{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:1rem}.single-attachment .attachment-name .icon{margin-right:.5rem}.single-attachment .attachment-size{color:#b8b8b8;-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem}.single-attachment .attachment-comments,.single-attachment .editable-attachment-comment{-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-comments span,.single-attachment .editable-attachment-comment span{color:#555}.single-attachment .attachment-settings{-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings{color:#b8b8b8;display:block;position:absolute}.single-attachment .attachment-settings .editable-settings:hover,.single-attachment .attachment-settings .settings:hover{color:#72a114}.single-attachment .attachment-settings .settings{opacity:0;top:.5rem}.single-attachment .attachment-settings .editable-settings{opacity:1;top:1rem}.single-attachment .attachment-settings .icon-edit,.single-attachment .attachment-settings .icon-floppy{right:3.5rem}.single-attachment .attachment-settings .icon-delete{right:2rem}.single-attachment .attachment-settings .icon-delete:hover{color:red}.single-attachment .attachment-settings .icon-drag-v{cursor:move;right:0}.single-attachment .icon-delete{color:#b8b8b8}.single-attachment .icon-delete:hover{color:red}.single-attachment .editable-attachment-deprecated{padding-left:1rem}.single-attachment .editable-attachment-deprecated span{color:#b8b8b8}.single-attachment .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.single-attachment .editable-attachment-deprecated input:checked+span{color:#444}.single-attachment .percentage{background:rgba(114,161,20,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.more-attachments{display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#72a114;margin-left:.5rem}.more-attachments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.add-attach{cursor:pointer;overflow:hidden;position:relative}.add-attach input{display:none}.category-config .category-item,.category-config .resume{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.add-attach span{color:#b8b8b8}.attachment-preview img{max-height:95vh;max-width:95vw}.category-config:first-child{border-top:1px solid #b8b8b8}.category-config .resume{-webkit-box-align:space-between;-webkit-align-items:space-between;-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:flex;padding:1rem;position:relative}.category-config .resume-title{width:280px}.category-config .count{color:#b8b8b8;float:left;padding-right:5px}.category-config .summary-role{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#b8b8b8;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#72a114}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .icon{font-size:2rem;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-align:right}.category-config .category-items{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden;background-color:#f5f5f5;width:100%}.category-config .category-items.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.colors-table .row,.duty-custom-fields .custom-fields-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #f5f5f5}.colors-table .icon,.colors-table .icon-check-square{font-size:1.2rem}.colors-table .table-header:hover{background:0 0}.colors-table .table-header .row{padding-left:50px}.colors-table form:last-child .row{border:0}.colors-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.colors-table .row:last-child{border:0}.colors-table .row.edition .current-color{cursor:pointer}.colors-table .row.edition,.colors-table .row.new-value{padding-left:50px}.colors-table .row.hidden{display:none}.colors-table .row .color-column{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.colors-table .row .status-name{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px;position:relative}.colors-table .row .status-name span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.colors-table .row .status-slug{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:130px;text-align:center}.colors-table .row .status-wip-limit{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#b8b8b8;border-radius:2px;height:40px;width:40px}.activity-single .activity-user img,.duty-custom-fields form input{width:100%}.colors-table .icon{color:#b8b8b8;margin-right:1rem;opacity:0}.colors-table .icon.icon-check-square,.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.colors-table .icon:hover{color:#72a114;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.colors-table .icon-delete:hover{color:red}.colors-table .icon-check-square{color:#72a114}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom{font-size:1.2rem;cursor:pointer;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom.open{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-fields-body{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.duty-custom-fields .custom-fields-body.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.duty-custom-fields .custom-field-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-single .custom-field-options{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-custom-fields .custom-field-single .custom-field-options a{color:#b8b8b8}.duty-custom-fields .custom-field-single .custom-field-options a:hover{color:#72a114}.duty-custom-fields .custom-field-data{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{display:block;line-height:.9rem}.duty-custom-fields .custom-field-options{margin:0}.duty-custom-fields .custom-field-value{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields form label{cursor:pointer}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#b8b8b8;margin-top:.5rem}.external-reference a{border-left:1px solid #b8b8b8;padding:0 .2rem;-webkit-transition:color .3s linear;transition:color .3s linear}.external-reference a:hover{color:#72a114}.external-reference a:first-child{border:0}.activity-single .comment-restore,.activity-single .date,.activity-single .deleted-comment,.activity-single.deleted-comment,.change-entry .activity-fromto,.more-activity,.more-comments,.show-more-comments{font-size:.9rem}.activity-single .deleted-comment .comment-body p,.activity-single.deleted-comment .comment-body p{font-size:1rem}.history-tabs{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.change-entry .activity-changed{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.history{margin-bottom:1rem}.changes-title{display:block;padding:.5rem}.changes-title:hover .icon{color:#72a114;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.changes-title .icon{color:#444;float:right;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:all .2s linear;transition:all .2s linear}.change-entry{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.change-entry:last-child{border-bottom:0}.change-entry .activity-changed,.change-entry .activity-fromto{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.history-tabs{border-bottom:3px solid #b8b8b8;margin-bottom:0;padding:.5rem 0}.history-tabs li{font-size:1.2rem;display:inline-block}.history-tabs li:first-child{border-right:1px solid #b8b8b8}.history-tabs a{padding:0 2rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs a.active{color:#444}.history-tabs a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs .icon{margin-right:.5rem}.add-comment:after{clear:both;content:'';display:table}.add-comment.active .button-green{display:block}.add-comment.active textarea{height:6rem;-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.add-comment.active .help-markdown{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.add-comment.active .preview-icon{opacity:1;position:absolute;right:1rem}.add-comment .help-markdown,.add-comment .preview-icon,.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave.ng-leave-active:last-child{opacity:0}.add-comment textarea{background:#fff;height:5rem;margin-bottom:.5rem;min-height:41px}.add-comment .save-comment{color:#fff;float:right}.add-comment .button-green{display:none}.more-comments,.show-more-comments{color:#b8b8b8;display:block;border-bottom:1px solid #b8b8b8}.add-comment .edit,.add-comment .preview-icon{position:absolute;right:1rem}.show-more-comments{border-top:1px solid #b8b8b8;padding:1rem 0 1rem 1rem}.show-more-comments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.more-comments{padding:1rem}.more-comments .prev-comments-num{color:#72a114;margin-left:.5rem}.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{-webkit-transition:all .3s ease-in;transition:all .3s ease-in}.comment-list.activeanimation .comment-single.ng-enter.ng-enter-active:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{opacity:1}.activity-single{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2rem 0;position:relative}.activity-single:hover .comment-delete,.activity-single:hover .comment-restore{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.activity-single:first-child{margin-top:0}.activity-single:last-child{border-bottom:0}.activity-single .deleted-comment,.activity-single.deleted-comment{color:#b8b8b8;padding:.5rem}.activity-single .deleted-comment a,.activity-single.deleted-comment a{color:#b8b8b8;margin-left:.3rem}.activity-single .deleted-comment a:hover,.activity-single.deleted-comment a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .deleted-comment img,.activity-single.deleted-comment img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:.5}.activity-single .deleted-comment .comment-body,.activity-single.deleted-comment .comment-body{display:none;margin:.2rem 0 .5rem}.activity-single .activity-username,.activity-single .username{margin-bottom:.5rem;color:#72a114}.activity-single .comment-restore{color:#b8b8b8;position:absolute;right:0;top:.4rem}.activity-single .comment-restore .icon{vertical-align:baseline}.activity-single .comment-restore:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .activity-user{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.activity-single .activity-content{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:calc(100% - 80px)}.activity-single .changes{background:#f5f5f5}.activity-single .changes .change-entry{display:none}.activity-single .changes .change-entry.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.activity-single .date{color:#b8b8b8;margin-left:1rem}.activity-single .wysiwyg{margin-bottom:0}.activity-single .comment-delete{color:red;opacity:0;position:absolute;right:0;top:2rem;-webkit-transition:all .2s linear;transition:all .2s linear}.activity-single .comment-delete:hover{color:#ff8282;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single.activity .change-entry{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.more-activity{border-bottom:1px solid #b8b8b8;color:#b8b8b8;display:block;padding:1rem}.more-activity .prev-activity-num{color:#72a114;margin-left:.5rem}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox-generic-form label{font-size:.75rem}.lightbox-add-member .help-text,.lightbox-delete-account .newsletter input+label,.lightbox-sprint-add-edit .delete-sprint,.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem}.lightbox-select-user .more-watchers{font-size:1rem}.lightbox-add-member .add-member-wrapper .icon-delete,.lightbox-add-member .icon,.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-size:1.2rem}.lightbox h2{font-size:1.6rem}.lightbox .close,.lightbox-add-member .icon-delete{font-size:2rem}.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress,.lightbox-select-user .more-watchers{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.lightbox h2,.lightbox-delete-account .newsletter input+label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.lightbox .close{color:#555;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.lightbox-add-member .add-member-wrapper fieldset,.lightbox-generic-form fieldset{position:relative}.lightbox .close:hover{color:#72a114}.open.lightbox{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.lightbox{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox-generic-loading .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.lightbox-generic-form form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form textarea{margin-bottom:1rem;max-height:9rem;min-height:7rem;resize:vertical}.lightbox-generic-form label{background:#f5f5f5;border:1px solid #b8b8b8;color:#444;cursor:pointer;display:block;padding:7px 30px;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form label:hover span{color:#fff}.lightbox-generic-form label span{color:#444;vertical-align:middle}.lightbox-generic-form .settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem}.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox-generic-form .settings fieldset:hover{color:#fff;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-add-member .button,.lightbox-add-member .extra-text{margin-top:1rem}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #72a114}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#72a114;border:1px solid #72a114;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-bulk form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-block textarea,.lightbox-create-issue textarea{min-height:8rem;max-height:12rem;margin-bottom:1rem}.lightbox-search form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-search fieldset{margin-bottom:1rem}.lightbox-add-member .add-member-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.lightbox-add-member .add-member-wrapper:last-child,.lightbox-add-member fieldset{margin-bottom:0}.lightbox-add-member .add-member-wrapper fieldset:first-child{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.lightbox-add-member .add-member-wrapper fieldset:last-child{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.lightbox-add-member select{width:80%}.lightbox-add-member .icon{margin-left:.5rem}.lightbox-add-member .icon-delete:hover{color:red}.lightbox-add-member .help-text{padding:.5rem 1rem}.lightbox-add-member .checksley-error-list{right:.5rem}.lightbox-add-member .checksley-error-list li{display:none}.lightbox-add-member .checksley-error-list li:first-child{display:block}.lightbox-sprint-add-edit form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.main-nav .active svg path,.main-nav svg path{opacity:1}.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint{color:#444;display:block;margin-top:1rem;text-align:right}.lightbox-sprint-add-edit .delete-sprint a{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-sprint-add-edit .delete-sprint a:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-generic-ask form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-account form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row,.related-tasks-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.lightbox-delete-project .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-webkit-flex-basis:500px;-ms-flex-preferred-size:500px;flex-basis:500px;-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;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{max-height:100%;max-width:100%;width:100%}.lightbox-generic-loading .progress-bar-wrapper{background:#e8e8e8;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;-webkit-transition:width .1s linear;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#e8e8e8;bottom:35px;color:#555;padding:.3rem;position:absolute;-webkit-transition:left .1s linear;transition:left .1s linear}.lightbox-create-issue form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:flex}.main-nav a,.main-nav span{display:block}.lightbox-create-issue .fieldset-row fieldset{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block .form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.lightbox-select-user .more-watchers{padding:.5rem;text-align:center}.lb-create-edit-userstory .ticket-role-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;max-width:calc(100% * (1/5) - .2rem)}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(5n+5){margin-right:0}.lb-create-edit-userstory .points-per-role{margin-bottom:1rem}.main-nav a:hover .helper{font-size:.9rem}.main-nav .item{font-size:1.2rem}tg-project-menu{background-position:0 -300px;min-height:calc(100vh - 40px);padding:1rem 0}.main-nav{list-style:none;padding:0;position:relative;text-align:center}.related-tasks-body .row,.related-tasks-body .status{text-align:left;position:relative}.main-nav a{color:#fff;padding:.75rem .8rem;position:relative}.main-nav a:hover{background:rgba(0,0,0,.2);color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.main-nav a:hover .helper{-webkit-animation:slideLeft .2s ease-in-out both;animation:slideLeft .2s ease-in-out both;background:-webkit-linear-gradient(left,#000 0,rgba(0,0,0,.8) 100%);background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;padding:.4rem 1rem;position:absolute;top:calc(50% - 1rem);-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;z-index:99}.main-nav a:hover .helper:after{background:#050505;content:'';height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:12px;z-index:98}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .active{color:#9dce0a}@-webkit-keyframes slideLeft{0%{opacity:0}100%{opacity:1}}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.related-tasks-body .pop-status,.related-tasks-body .pop-status a,.related-tasks-body .row{font-size:.9rem}.related-tasks-body .task-name input,.related-tasks-header .related-tasks-title{font-size:1rem}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine,.related-tasks-body .task-settings a,.related-tasks-header .icon{font-size:1.2rem}.related-tasks-body .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.related-tasks-header .related-tasks-title{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.related-tasks{margin-bottom:2rem;position:relative}.related-tasks-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.related-tasks-header .icon{color:#444;cursor:pointer}.related-tasks-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.related-tasks-body{width:100%}.related-tasks-body .row{-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;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.5rem 0 .5rem .5rem;width:100%}.related-tasks-body .row:hover{background:0 0}.related-tasks-body .row:hover .task-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .row:last-child{border:0}.related-tasks-body .row .tasks{overflow:hidden;width:100%}.related-tasks-body .row .status{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100px}.related-tasks-body .row .assigned-to{cursor:pointer;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .status:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover a{text-align:left;width:100%}.related-tasks-body .status .popover .point{text-align:center}.related-tasks-body .status .icon{color:#b8b8b8;margin-left:.2rem;opacity:0}.related-tasks-body .pop-status{background:#050505;color:#fff;display:none;left:40%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.related-tasks-body .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.related-tasks-body .blocked .icon,.related-tasks-body .blocked .icon:hover,.related-tasks-body .blocked a,.related-tasks-body .blocked a:hover,.related-tasks-body .blocked:hover .icon,.related-tasks-body .blocked:hover .icon:hover,.related-tasks-body .blocked:hover a,.related-tasks-body .blocked:hover a:hover,.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .task-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.related-tasks-body .task-name a{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-name input{margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .task-name.loading span{-webkit-animation:loading .5s linear,spin 1s linear infinite;animation:loading .5s linear,spin 1s linear infinite}.filters-inner .loading .loading-spinner,.ticket-detail-settings .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:#ff8282;color:#fff}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .iocaine,.related-tasks-body .iocaine:hover{background:rgba(157,206,10,.3)}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine{display:inline-block;margin-right:.5rem;vertical-align:top}.related-tasks-body .task-settings{margin:0 0 0 2rem;opacity:0;position:absolute;right:0;top:0;width:10%}.related-tasks-body .task-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .task-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .assigned-to{position:relative;text-align:left}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto.editable{cursor:pointer}.related-tasks-body .task-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{opacity:0;position:absolute;right:.5rem;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-data .ticket-data-container,.ticket-status .priority-data .pop-priority,.ticket-status .priority-data .pop-priority a,.ticket-status .severity-data .pop-severity,.ticket-status .severity-data .pop-severity a,.ticket-status .status-data .pop-status,.ticket-status .status-data .pop-status a,.ticket-status .type-data .pop-type,.ticket-status .type-data .pop-type a,.ticket-track-buttons .track-inner{font-size:.9rem}.ticket-data .ticket-title span:last-child,.ticket-track-buttons .track-button-counter{font-size:1.2rem}.ticket-data .ticket-title,.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .status-data .pop-status,.ticket-status .type-data .pop-type,.ticket-track-buttons .track-inner{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-detail-settings .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.ticket-data .ticket-title{font-size:1.6rem;margin:1.5rem 0 2rem}.ticket-data .ticket-title span{margin-right:.25rem}.ticket-data .ticket-data-container{margin-bottom:1rem}.ticket-data .ticket-data-container .icon{margin-left:.25rem}.ticket-data .level{display:inline-block;margin-right:.5rem;vertical-align:top}.filters h1,.filters h1 a{vertical-align:baseline}.ticket-data .level-name{color:#c2c2c2;float:right;text-transform:lowercase}.ticket-data .ticket-estimation .ticket-role-points{max-width:25%}.ticket-data .ticket-estimation .ticket-role-points:first-child{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.ticket-status{margin-bottom:.5rem}.ticket-status:last-child{margin:0}.ticket-status div{background:#e8e8e8;padding:.5rem 1rem .5rem .5rem;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .clickable:hover{background:#dcdcdc;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .type-data{position:relative}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .type-data .pop-type a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .severity-data{position:relative}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .severity-data .pop-severity a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .priority-data .pop-priority:after,.ticket-status .status-data .pop-status:after{background:#050505;height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);content:''}.ticket-status .priority-data{position:relative}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .priority-data .pop-priority a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{position:absolute;transform:rotate(45deg);width:0}.ticket-status .status-data{position:relative}.ticket-status .status-data .pop-status{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .status-data .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .status-data .pop-status a:last-child{border:0}.ticket-status .status-data .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .status-data .pop-status a:hover.point{color:#fff}.ticket-status .status-data .pop-status:after{position:absolute;transform:rotate(45deg);width:0}.ticket-track-buttons .track-inner{background:#e8e8e8;padding:.25rem;text-transform:uppercase;-webkit-transition:background .25s;transition:background .25s}.ticket-track-buttons .track-inner:hover{background:#dcdcdc}.ticket-track-buttons .track-button{width:100%}.ticket-track-buttons .active .track-button-counter{background:rgba(68,68,68,.5)}.ticket-track-buttons .active:hover .track-inner{background:rgba(157,206,10,.2)}.ticket-track-buttons .active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.ticket-track-buttons .active.is-hover path{fill:#ff8282}.single-project .track-container .icon path,.single-project .track-container .list-itemtype-track-likers.active path,.single-project .track-container .list-itemtype-track-watchers.active path{fill:currentcolor}.ticket-track-buttons .track-button-counter{background:rgba(68,68,68,.25);color:#f5f5f5;padding:0 .5rem}.ticket-track-buttons .vote-button{margin-bottom:.3rem}.ticket-track-buttons .watch-button{border-bottom:0}.ticket-track-buttons .ticket-watchers{margin:.5rem 0}.wizard-create-project .create-step1 fieldset:first-child,.wizard-create-project .wizard-action a:first-child{margin-right:.5rem}.ticket-track-buttons .add-watcher{display:block;margin:.5rem}.ticket-track-buttons .add-watcher .icon{background:rgba(68,68,68,.25);color:#f5f5f5;margin-right:.5rem;padding:.25rem}.ticket-track-buttons .add-watcher:hover .icon{background:#9dce0a;color:#f5f5f5;-webkit-transition:background .3s linear;transition:background .3s linear}.ticket-detail-settings{margin-top:2rem}.ticket-detail-settings .button,.ticket-detail-settings label{display:block;margin-bottom:.5rem;text-align:center}.ticket-detail-settings .button.editable,.ticket-detail-settings label.editable{cursor:pointer}.ticket-detail-settings .button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .button-gray,.ticket-detail-settings .button-gray:hover{background:#b8b8b8}.ticket-detail-settings .button-gray.editable:hover{background:#444;cursor:pointer}.ticket-detail-settings .button-gray.active{background:#72a114}.ticket-detail-settings .item-block.editable:hover{background:red;cursor:pointer}.ticket-detail-settings .button-red{display:block;margin-top:2rem}.wizard-create-project{background:url(/images/invitation_bg.jpg) center center no-repeat;bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910;background-size:cover;color:#fff;text-align:center}.wizard-create-project p{font-size:.9rem}.wizard-create-project .close{font-size:2rem;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.open.wizard-create-project{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.wizard-create-project{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.wizard-create-project fieldset{margin-bottom:1rem}.wizard-create-project .button-gray,.wizard-create-project .button-green{display:block;padding:12px;text-align:center}.wizard-create-project form{width:500px}.wizard-create-project .title{text-align:center;width:100%}.wizard-create-project h1,.wizard-create-project p{color:#fff}.wizard-create-project h1{line-height:1.5rem}.wizard-create-project p{opacity:.8}.wizard-create-project input,.wizard-create-project select,.wizard-create-project textarea{background:rgba(255,255,255,.7)}.wizard-create-project input::-webkit-input-placeholder,.wizard-create-project select::-webkit-input-placeholder,.wizard-create-project textarea::-webkit-input-placeholder{color:#444}.wizard-create-project input::-moz-placeholder,.wizard-create-project select::-moz-placeholder,.wizard-create-project textarea::-moz-placeholder{color:#444}.wizard-create-project input:-moz-placeholder,.wizard-create-project select:-moz-placeholder,.wizard-create-project textarea:-moz-placeholder{color:#444}.wizard-create-project input:-ms-input-placeholder,.wizard-create-project select:-ms-input-placeholder,.wizard-create-project textarea:-ms-input-placeholder{color:#444}.wizard-create-project .close{color:#fff}.wizard-create-project .close:hover{color:#ff8282}.wizard-create-project .wizard-step{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out;-webkit-animation-direction:alternate-reverse;animation-direction:alternate-reverse;display:none}.wizard-create-project .wizard-step.active{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out}.wizard-create-project .wizard-step.active.create-step1,.wizard-create-project .wizard-step.active.create-step2,.wizard-create-project .wizard-step.active.create-step3{display:block}.wizard-create-project .wizard-action div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .wizard-action a{color:#fff;display:inline-block;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 .template-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .create-step1 fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 input{display:none}.wizard-create-project .create-step1 input:checked+label{background:rgba(157,206,10,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label{background:rgba(245,245,245,.7);cursor:pointer;display:block;margin-bottom:1rem;padding:1rem;text-align:center;-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label:hover{background:rgba(114,161,20,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label .icon{font-size:3rem;color:#fff}.wizard-create-project .create-step1 h2{color:#fff;margin:.5rem 0 0;text-transform:uppercase}.wizard-create-project .create-step1 p{text-align:center}.wizard-create-project .progress-bar{bottom:0;height:.5rem;left:0;position:absolute;width:100%}.wizard-create-project .step1 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:25%}.wizard-create-project .step1 .progress-state span:nth-child(1){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .step2 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:75%}.wizard-create-project .step2 .progress-state span:nth-child(1),.wizard-create-project .step2 .progress-state span:nth-child(2){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .progress-state{position:absolute;width:100%}.wizard-create-project .progress-state span{color:rgba(255,255,255,.5);display:inline-block;margin-left:-100px;position:absolute;text-align:center;top:-2rem;-webkit-transition:all 1s ease-in;transition:all 1s ease-in;width:200px}.wizard-create-project .progress-state span:nth-child(1){left:25%}.wizard-create-project .progress-state span:nth-child(2){left:75%}.wizard-create-project .progress-bar-wrapper{background:rgba(255,255,255,.3);height:.5rem}.wizard-create-project .bar{background:rgba(157,206,10,.9);height:.5rem;left:0;position:absolute;top:0;width:0}.create-project{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;background-size:cover;-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;bottom:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.create-project .tagline{font-size:2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#fff;line-height:2rem;text-transform:uppercase}.introjs-tooltip p,.single-project .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project fieldset{margin-bottom:1rem}.create-project .create-project-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.create-project h1{color:#fff;text-align:center}.create-project .logo,.create-project .tagline{margin-bottom:1rem;text-align:center}.create-project form{margin-bottom:2rem}.create-project input{background:#fff}.create-project input::-webkit-input-placeholder{color:#f5f5f5}.create-project input::-moz-placeholder{color:#f5f5f5}.create-project input:-moz-placeholder{color:#f5f5f5}.create-project input:-ms-input-placeholder{color:#f5f5f5}.create-project .button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.create-project .button:hover{background:#212121}.create-project a:hover{color:#fff}.filters h2 .icon-arrow-right{font-size:1rem}.filters-inner .loading .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-width:1rem}.filters h1 .icon{margin:0}.filters h2 .icon-arrow-right,.single-project h1{vertical-align:middle}.filters h2{font-size:1.2rem;margin-top:1rem}.filters input{background:#444;color:#fff}.filters input::-webkit-input-placeholder{color:#b8b8b8}.filters input::-moz-placeholder{color:#b8b8b8}.filters input:-moz-placeholder{color:#b8b8b8}.filters input:-ms-input-placeholder{color:#b8b8b8}.filters .icon-search{color:#b8b8b8;position:absolute;right:.7rem;top:.7rem}.filters-inner{opacity:0;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.filters-inner .loading{margin:0;padding:8px;text-align:center;width:100%}.filters-applied{margin-top:.5rem}.filters-step-cat .save-filters{color:#fff;display:block;text-align:center}.filters-step-cat .my-filter-name{background:#444;color:#f5f5f5;width:100%}.filters-step-cat .my-filter-name::-webkit-input-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name::-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-ms-input-placeholder{color:#b8b8b8}.filters-cats{margin-top:2rem}.filters-cats li{border-bottom:1px solid #b8b8b8;text-transform:uppercase}.filters-cats .custom-filters .title{color:#72a114}.filters-cats a{color:#444;display:block;padding:.5rem 0 .5rem .5rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.filters-cats .icon{color:#444;float:right;opacity:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-overlay{background:-webkit-radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background-color:#f5f5f5}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#72a114;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .description{font-weight:100}.single-project .title{font-weight:800}.single-project .track-container .list-itemtype-track{font-size:.9rem}.single-project .description,.single-project .title{font-size:1rem}.single-project .single-project-intro{margin-bottom:2rem}.single-project .intro-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.single-project h1{color:#000;display:inline-block;line-height:1.2;margin-bottom:0;margin-right:3rem}.single-project .private{font-size:1rem;vertical-align:super}.single-project .like-watch-container{margin-left:auto}.single-project .track-buttons-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.single-project .project-data,.single-project .title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#000}.single-project .track-container .icon svg{max-height:1rem;max-width:1rem}.single-project .project-data{display:flex}.single-project .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-shrink:3;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .involved-data{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-organization,.single-project .involved-team{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-organization li,.single-project .involved-team li{margin-right:.14rem;width:24%}.single-project .involved-organization li:nth-child(4n),.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-organization a,.single-project .involved-team a{display:block}.single-project .involved-organization img,.single-project .involved-team img{border-radius:.2rem;width:100%}.issues-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table .pop-status,.issues-table .pop-status a,.issues-table .table-main{font-size:.9rem}.issues-table .title{font-size:1rem}.empty-issues .title{font-size:1.2rem;text-transform:uppercase}.empty-issues p,.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.issues-table .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8}.issues-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .avatar,.kanban-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .title:hover{background:0 0}.issues-table .title div{cursor:pointer}.issues-table .title .votes{color:#555}.issues-table .table-main{border-bottom:1px solid #ebebeb}.issues-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-webkit-flex-basis:60%;-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-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-align:center;width:75px}.issues-table .votes{color:#555;-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes.inactive{color:#b8b8b8}.issues-table .votes.is-voted{color:#9dce0a}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .created-field,.issues-table .issue-field{-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{opacity:0;position:absolute;right:0;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .pop-status{background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99}.issues-table .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1200px){.issues-table .created-field,.issues-table .level-field{display:none}}@media (max-width:767px){.issues-table .assigned-field,.issues-table .created-field,.issues-table .level-field{display:none}}.empty-issues{margin-top:4rem;text-align:center}.empty-issues img{margin-bottom:1rem}.empty-issues p,.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table-body .task-column .kanban-column-intro{font-size:.9rem}.kanban-table-body,.kanban-table-header .task-colum-name .icon{font-size:1rem}.kanban-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table .vfold.task-colum-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold .kanban-task,.kanban-table .vfold.task-colum-name .icon-bulk,.kanban-table .vfold.task-colum-name .icon-closed-eye,.kanban-table .vfold.task-colum-name .icon-open-eye,.kanban-table .vfold.task-colum-name .icon-plus,.kanban-table .vfold.task-colum-name .icon-vfold,.kanban-table .vfold.task-colum-name .icon-vunfold,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.task-column{-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.kanban-table-header .kanban-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.kanban-table-body,.kanban-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-header .task-colum-name{font-size:1.2rem;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem .5rem .5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.kanban-table-header .task-colum-name .icon.hfold,.kanban-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-table-header .icon-closed-eye,.kanban-table-header .icon-open-eye{display:inline-block}.kanban-table-header .icon-closed-eye svg,.kanban-table-header .icon-open-eye svg{fill:#b8b8b8;height:1.1rem;margin-top:.25rem;width:1.1rem}.kanban-table-header .icon-closed-eye:hover svg,.kanban-table-header .icon-open-eye:hover svg{fill:#72a114}.kanban-table-header .icon-open-eye .svg-eye-closed{display:none}.kanban-table-header .icon-closed-eye .svg-eye-closed,.kanban-table-header .icon-open-eye .svg-eye-open{display:block}.kanban-table-header .icon-closed-eye .svg-eye-open{display:none}.kanban-table-body{display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-inner,.search-filter ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;margin:0 10px 0 0;max-width:300px;overflow-y:auto;widows:300px}.kanban-table-body .task-column:last-child{margin-right:0}.kanban-table-body .task-column .kanban-column-intro{font-family:opensans-semibold,Arial,Helvetica,sans-serif;color:#b8b8b8;margin:1rem 2rem}.kanban-table-body .task-column .kanban-column-intro.active{color:#050505}.kanban-table-body .task-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-inner{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.search-filter a{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;opacity:.2}.search-filter ul{border-bottom:3px solid #b8b8b8;display:flex;padding-bottom:.5rem}.search-filter li{margin-right:1rem}.search-filter .active,.search-filter a:hover{color:#555;opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.search-filter .icon{margin-right:.4rem}.search-filter .name{padding-left:5px}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#b8b8b8}.search-in input::-moz-placeholder{color:#b8b8b8}.search-in input:-moz-placeholder{color:#b8b8b8}.search-in input:-ms-input-placeholder{color:#b8b8b8}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{color:#b8b8b8}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #f5f5f5}.search-result-table .user-story-name .icon{font-size:1rem;color:#b8b8b8}.empty-search-results .title{font-size:1.2rem;text-transform:uppercase}.search-result-table .row{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .row .ref{-webkit-flex-basis:30px;-ms-flex-preferred-size:30px;flex-basis:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 1rem}.search-result-table .row .user-stories{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.search-result-table .row .points,.search-result-table .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem}.search-result-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.search-result-table .points,.search-result-table .status{position:relative}.search-result-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.empty-search-results{margin-top:4rem;text-align:center}.empty-search-results img{margin-bottom:1rem}.empty-search-results p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.team-filters nav li{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.table-team .team-header,.team-filters nav li:last-child{border-bottom:0}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters nav a{display:block;padding:1rem 0 1rem 1rem}.team-filters nav a.active,.team-filters nav a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.team-filters nav .active,.team-filters nav a.active.icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.team-filters nav .icon{color:#050505;float:right;opacity:0}.table-team .leave-project,.table-team .popover,.table-team .popover a{font-size:.9rem}.table-team .attribute .points{font-size:1.6rem}.table-team .attribute,.table-team .attribute .points,.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.policy-table .policy-table-header,.table-team .avatar .name,.table-team .team-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.table-team .row{padding:.5rem}.table-team .username{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:6;-webkit-flex:6;-ms-flex:6;flex:6;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{color:#050505;font-size:1.8rem}.table-team .attribute .points{color:#444}.table-team .attribute .top{color:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{color:#b8b8b8;display:block}.table-team .leave-project .icon{margin-right:.2rem}.table-team .leave-project:hover .icon{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .hero{width:100%}.table-team .hero .row{background:#f5f5f5;border-bottom:0;margin:1rem 0}.table-team .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.table-team .avatar img{-webkit-flex-basis:66px;-ms-flex-preferred-size:66px;flex-basis:66px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:66px}.table-team .avatar figcaption{margin-left:1rem;width:65%}.table-team .avatar figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .popover{background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99}.table-team .popover a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.policy-table .policy-table-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{border-bottom:2px solid #b8b8b8}.user-change-password label,.user-profile label{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#72a114;-webkit-transition:background .3s linear;transition:background .3s linear}.policy-table label{background:#b8b8b8;border-radius:5px;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile form .avatar-container p{font-size:.75rem}.user-profile .delete-account,.user-profile form .avatar-container .use-gravatar{font-size:.9rem}.user-profile form .avatar-container span{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.user-profile form .avatar-container .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem}.user-profile form{max-width:700px;width:100%}.user-profile form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.user-profile form .avatar-container{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:1rem}.user-profile form .avatar-container .image-container{position:relative}.user-profile form .avatar-container .avatar{border-radius:8%;width:100%}.user-profile form .avatar-container .overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile form .avatar-container .loading-spinner{border:0;min-height:3rem;min-width:3rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.user-profile form .avatar-container p{line-height:.8rem;margin-bottom:.3rem;text-align:center}.user-profile form .avatar-container .use-gravatar{cursor:pointer;display:inline-block;text-align:center;width:100%}.user-profile form .data{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.user-profile fieldset{margin-bottom:1rem}.user-profile .submit{margin-top:2rem}.user-profile label{display:block;margin-bottom:.5rem}.user-profile textarea{min-height:7rem}.user-profile .button-green{color:#fff;cursor:pointer;display:block;padding:12px;text-align:center}.user-profile .delete-account{display:block;margin-top:1rem}.wiki-nav li input{font-size:1rem}.wiki-nav li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.wiki-nav li:hover .icon{opacity:1;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li a{display:block;padding:1rem 0 1rem 1rem}.wiki-nav li a span{cursor:pointer}.wiki-nav li .icon{color:#050505;float:right;opacity:0;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background:#444;color:#f5f5f5}.wiki-nav li input::-webkit-input-placeholder{color:#b8b8b8}.wiki-nav li input::-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-ms-input-placeholder{color:#b8b8b8}.wiki-nav li .loading{margin:0;padding:8px;text-align:center;width:100%}.wiki-nav .add-button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.wiki-summary .wiki-user-modification,.wiki-summary div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.wiki-summary .username{font-size:1.2rem;color:#9dce0a;white-space:nowrap}.wiki-summary{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary div{display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:1rem}.wiki-summary .number{line-height:2rem;top:0}.wiki-summary .wiki-user-modification{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary figure{margin-right:.3rem;width:32px}.external-app-wrapper .app-card a,.external-app-wrapper .app-card p,.external-app-wrapper .user-card a{font-size:.75rem}.external-app-wrapper .cancel{font-size:.9rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:6rem;margin:0 auto;width:6rem}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.external-app-wrapper .app-card a,.external-app-wrapper .button-green,.external-app-wrapper .user-card a{display:block}.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card .app-image{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.external-app-wrapper .user-card{background:#F0EFD1;border:1px solid #000;padding:1rem}.external-app-wrapper .user-card .user-image{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .cancel{display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #f5f5f5;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;-webkit-transition-delay:.2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single.blocked,.working-on .duty-single.blocked{background:rgba(255,130,130,.2);color:red}.watching .duty-single>a,.working-on .duty-single>a{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:0;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}.empty-ticket .data,.home-project-list li a{-webkit-box-orient:vertical;-webkit-box-direction:normal}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper,.home-wrapper .title-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-wrapper{display:flex}.home-wrapper .duty-summary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .project-list{width:250px}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;margin:0 0 .5rem;padding:.9rem 1rem}.empty-ticket,.home-project-list li a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-project-list p{font-size:.75rem}.projects-empty p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.home-project-list h2,.home-project-list p{font-family:opensans-regular,Arial,Helvetica,sans-serif}.home-project-list li{border-radius:3px;cursor:pointer;margin-bottom:.75rem;padding:1rem;text-overflow:ellipsis}.home-project-list li:hover{border-color:#9dce0a;-webkit-transition:all .3s linear;transition:all .3s linear}.home-project-list li:hover p{color:#555;-webkit-transition:color .3s linear;transition:color .3s linear}.home-project-list li:hover .private path{fill:#555;-webkit-transition:fill .3s linear;transition:fill .3s linear}.home-project-list li a{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:5rem}.home-project-list h2{color:#555;font-size:1.5rem;line-height:1.3;margin-bottom:.5rem;text-transform:none}.home-project-list h2 .project-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.home-project-list p{line-height:125%;margin:0}.projects-empty{text-align:center}.projects-empty svg{height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty svg path{fill:#f5f5f5}.navbar .nav-left>a path,.navbar a:hover svg path{fill:#fff}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:2rem 9rem 1rem;text-align:center}.empty-ticket{display:flex}.empty-ticket .data,.navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.empty-ticket:not(:last-child){border-bottom:1px solid #f5f5f5;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e8e8e8;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:40vw}.empty-ticket .line:last-child{margin:0;width:20vw}.navbar{display:flex;height:40px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar:after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar .nav-left>a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left>a.logo{background:rgba(0,0,0,.2);padding:.4rem .75rem}.navbar .nav-left>a svg{height:1.6rem;max-width:2rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right a{color:#fff;padding:.5rem 2rem}.navbar a{color:#fff;display:inline-block;-webkit-transition:all .2s linear;transition:all .2s linear}.navbar a:hover{background:rgba(0,0,0,.2);color:#212121}.navbar a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar a.user-avatar span{padding-right:1rem}.navbar img{height:2.5rem;padding-left:.5rem;vertical-align:middle}.navbar svg{height:1.2rem;max-width:1.2rem}.navbar svg path{fill:#fff;-webkit-transition:all .2s;transition:all .2s}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(33,33,33,0);border-bottom-color:#212121}.navbar-dropdown ul:after{border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown a{color:#f5f5f5;display:block;padding:.8rem .5rem}.navbar-dropdown .create-options,.profile-filter{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#212121}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.navbar-dropdown a.import-project-button{padding-left:.75rem;padding-right:.75rem}.navbar-dropdown .create-options{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.profile-favs{border-top:1px solid #f5f5f5}.profile-filter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile,.profile-filter .searchbox{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.profile-filter .searchbox{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{color:grayer;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs,.profile-projects,.profile-timeline{border-top:1px solid #f5f5f5}.profile-filter .searchbox input:focus{border-bottom:1px solid #b8b8b8;outline:0;-webkit-transition:border-bottom .3s ease-in;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#b8b8b8;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile .timeline-wrapper .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-height:3rem;max-width:3rem}.profile{display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{background:#fff;margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;-webkit-transition:all .3s cubic-bezier(.09,.43,.35,.95);transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .profile-sidebar{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{margin:2rem auto;max-width:160px;text-align:center}.profile .empty-tab p{font-size:.9rem}.profile-bar .profile-stats .stat-name{font-size:.9rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username{font-size:1.2rem}.profile-bar h2{font-size:1.6rem}.profile-bar .profile-stats .stat-number,.profile-bar h1{font-size:2rem}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .profile-organizations h3,.profile-bar .profile-stats .stat-number,.profile-bar h1{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{-webkit-filter:brightness(40%) saturate(150%) hue-rotate(60deg);filter:brightness(40%) saturate(150%) hue-rotate(60deg);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1);-webkit-transition-delay:.3s;transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.01,.7,1,1);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#b8b8b8;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar h1{line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar h2{color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#b8b8b8;margin-bottom:1rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#b8b8b8}.main-nav svg path,.navbar a svg path{fill:#fff}.profile-bar .profile-stats{border-bottom:1px solid #f5f5f5;color:#555;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{display:block;line-height:1}.profile-bar .profile-stats .stat-name{display:block}.profile-bar .profile-organizations{border-bottom:1px solid #f5f5f5;border-top:1px solid #f5f5f5;margin-bottom:1rem;padding:1rem 0}.profile-bar .profile-organizations h3{margin-bottom:.5rem}.profile-bar .profile-organizations .profile-organizations-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.profile-bar .profile-organizations .organization{background:#b8b8b8;border-radius:5px;height:45px;margin-right:.2rem;width:45px}.profile-bar .profile-quote{background:url(/images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contact-single .profile-contact-data h1 span{font-size:.9rem}.profile-contact-single .profile-contact-data .extra-info{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-contact-single .profile-contact-data h1,.profile-contact-single .profile-contact-data h1 span{font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-contacts{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}.profile-contact-filters{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.profile-contact-filters a{border-bottom:2px solid #fff;color:#b8b8b8;display:inline-block;padding:1rem 1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-contact-filters a.active,.profile-contact-filters a:hover{border-bottom:2px solid #b8b8b8;color:#72a114}.profile-contact-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.8rem 1rem}.profile-contact-single .profile-contact-picture{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:1rem;max-width:54px}.profile-contact-single .profile-contact-picture img{border-radius:.2rem;width:100%}.profile-contact-single .profile-contact-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-contact-single .profile-contact-data h1{font-size:1.2rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:1.6;margin-bottom:0;text-transform:none}.profile-contact-single .profile-contact-data h1 span{background:#f5f5f5;color:#555;margin-left:1rem;padding:.1rem .3rem}.profile-contact-single .profile-contact-data p{color:#555;margin-bottom:0}.profile-contact-single .profile-contact-data .extra-info{color:#555}.profile-contact-single .profile-contact-data .position{margin-right:.3rem}.profile-contact-single .profile-project-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-left:auto;width:100px}.profile-contact-single .profile-project-stats div{color:#b8b8b8;margin-right:.5rem}.profile-contact-single .profile-project-stats div .icon{margin-right:.2rem;vertical-align:center}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{display:inline-block;padding:1rem 1.25rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #f5f5f5;border-right:1px solid #f5f5f5;position:relative;top:1px;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .icon{margin-right:.4rem}.profile-sidebar p{font-size:.9rem}.profile-sidebar h4{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.profile-sidebar h4 .icon{color:#b8b8b8;margin-right:.3rem;vertical-align:text-bottom}.profile-sidebar a{color:#72a114}.profile-sidebar .trans-button{margin-bottom:1rem}.profile-projects .list-itemtype-project{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:10rem}.profile-projects .list-itemtype-project .list-itemtype-project-right{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-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:200px}.project-list-wrapper .help-area{font-size:.9rem;color:#b8b8b8;width:200px}.project-list-wrapper .drag{font-size:1.2rem}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.project-list-wrapper .create-options a.create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .create-options a.import-project-button{padding:.53rem .8rem}.project-list-wrapper .create-options a.import-project-button:hover{background:#444}.project-list-wrapper .create-options a.import-project-button .icon-upload{margin:0}.project-list-wrapper .project-list-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .placeholder{background-color:#fdfdfd;height:5rem}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:#fcfef8;cursor:move;-webkit-transition:background .3s;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .drag{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:#b8b8b8;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.profile-timeline .single-attachment span{font-size:1rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child,.profile-timeline .activity-member-view a{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-timeline .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.profile-timeline .activity-item{border-bottom:1px solid #f5f5f5;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#72a114}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#b8b8b8;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-webkit-flex-basis:2rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-member-view{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-timeline .activity-member-view p{color:#b8b8b8}a:hover,h1 .date,h2 .date,h3 .date,h4 .date,h5 .date,h6 .date{color:#000}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.profile-timeline .single-attachment .icon{margin-right:.3rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{max-height:3rem;max-width:3rem}:root .taskboard-table-body .task-row,_:-ms-fullscreen .task-row{min-height:auto}.checksley-error-list{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}body{background:#fff}.extrabar,.master,.menu-secondary,.menu-tertiary{background:#fff;border-left:1px solid #000;border-right:1px solid #000}.master,.menu-secondary{background:#fff}.menu-tertiary{background-color:#fff}.extrabar{background:#fff}h1,h2,h3,h4,h5,h6{font-family:Arial,Helvetica,sans-serif}a{color:#212121}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{background:#fff;border-color:#000;color:#000}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#000}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#000}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#000}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#000}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #ff2400}.checksley-error-list{background:rgba(255,36,0,.7);color:#fff}blockquote{border-left:5px solid #757575}blockquote,blockquote p,cite{color:#000}.navbar a :hover,.summary{color:#fff}.button-gray{background:#000}.tag{background:#fff;border:1px solid #000}.summary{background:#212121}.navbar{background:#000}.navbar:after{background:url(../images/menu-vert.png) top left}.activity-item p,.duty-custom-fields .custom-field-data .custom-field-description,.kanban-table-header .task-colum-name .icon,.points-per-role>li,.private path,.table-team .avatar .position,.taskboard-table-header .task-colum-name .icon,.us-created-by .created-by .created-date,.us-created-by .created-by .created-title,.watching .duty-id,.working-on .duty-id{color:#000}tg-project-menu{background-color:#000;background-image:none}.main-nav .active{background:#fff}.main-nav .active svg path{fill:#000}.taskboard-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.taskboard-table-body .taskboard-tasks-box{background:#fff;border:1px solid #000}.kanban-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.kanban-table-body .kanban-uses-box{background:#f5f5f5}.points-per-role>li:first-child{background:#000}.us-detail-settings .button-gray{background:0 0;border:1px solid #000;color:#000}.us-detail-settings .button-gray.active,.us-detail-settings .button-gray:hover{color:#fff}.history-tabs a,.more-attachments span,.us-detail-settings .button-gray span{color:#000}.login-main,.login-main a{color:#fff}.home-project-list li{border:1px solid #000}.home-project-list p{color:#000}.profile-content-tabs .tab,.profile-sidebar p{color:#212121}.settings-nav .active{background:#000;color:#fff}.admin-submenu ul a{color:#000}.policy-table input:checked+label{color:#fff}.policy-table label{color:#000}.policy-table label:hover{color:#fff}.admin-common .admin-subtitle,.admin-membership-table .avatar .email,.admin-membership-table .delete{color:#000}.admin-functionalities .functionality.active{background:#fff;border:1px solid #000} \ No newline at end of file + */.pika-single{display:block;position:relative;width:240px;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.introjs-bullets ul,.introjs-button,.pika-select{display:inline-block}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;position:absolute!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid #fff;position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-color:transparent transparent #fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow.left,.introjs-arrow.right{top:10px}.introjs-arrow.right,.introjs-arrow.right-bottom{right:-10px;border-color:transparent transparent transparent #fff}.introjs-arrow.right-bottom{bottom:10px}.introjs-arrow.bottom{bottom:-10px;border-color:#fff transparent transparent}.introjs-arrow.left,.introjs-arrow.left-bottom{left:-10px;border-color:transparent #fff transparent transparent}.introjs-arrow.left-bottom{bottom:10px}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{position:relative;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-progress,.loader-active,.taskboard,.taskboard-inner,body.loading-project,h1 .date,h1 span{overflow:hidden}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.admin-membership header a,.header-with-actions .button,.kanban .kanban-settings,.save-wiki{float:right}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.master,fieldset{position:relative}body,html{width:100%;min-height:100%}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}body,h1,h2,h3,h4,h5,h6{font-weight:400;color:#212121}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}body{font-weight:400;font-family:opensans-regular,Arial,Helvetica,sans-serif;line-height:1.3}.icon{font-family:taiga}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body .master.ng-animate{-webkit-transition:0;transition:0}.drag-active{overflow-x:hidden}.master{height:100%;min-height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu-secondary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary.filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:0}.menu-secondary.filters-bar.active{padding:2em 1em;-webkit-transition:all .2s linear;transition:all .2s linear;width:260px}.menu-secondary.filters-bar.active .filters-inner{opacity:1;-webkit-transition:all .4s ease-in;transition:all .4s ease-in}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions .action-buttons{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;margin-left:10px}fieldset,p img{margin:0}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}h2{font-size:2rem}h1,h1 span{font-size:3rem}h1,h2{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{margin-bottom:1rem;text-transform:uppercase}h1 span{margin-right:.5rem;vertical-align:bottom}h1 span.green,h1 span:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#000}h1 .date{max-width:500px}h2{line-height:1.2;margin-bottom:1rem}p{line-height:1.5}em{font-style:italic}strong{font-weight:700}[class*=' icon-']:before,[class^=icon-]:before,[data-icon]:before{font-family:taiga!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;speak:none;text-transform:none!important}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{-webkit-transition:color .3s linear;transition:color .3s linear}[data-icon]:before{content:attr(data-icon)}.admin-contrib .help .alt-image,.admin-third-parties .help .alt-image,.wysiwyg dl dt{font-style:italic}.icon-bug:before{content:'a'}.icon-copy:before{content:'b'}.icon-minimize:before{content:'c'}.icon-maximize:before{content:'d'}.icon-comment:before{content:'e'}.icon-plus:before{content:'f'}.icon-attachments:before{content:'g'}.icon-edit:before{content:'h'}.icon-documents:before{content:'i'}.icon-delete:before{content:'j'}.icon-arrow-bottom:before{content:'k'}.icon-arrow-left:before{content:'l'}.icon-arrow-right:before{content:'m'}.icon-arrow-up:before{content:'n'}.icon-briefcase:before{content:'o'}.icon-caret-down:before{content:'p'}.icon-caret-up:before{content:'q'}.icon-check-square:before{content:'r'}.icon-notification-error:before{content:'s'}.icon-settings:before{content:'t'}.icon-document:before{content:'u'}.icon-warning:before{content:'v'}.icon-move:before{content:'w'}.icon-drag-v:before{content:'x'}.icon-filter:before{content:'y'}.icon-help:before{content:'z'}.icon-reload:before{content:'A'}.icon-writer:before{content:'B'}.icon-stats:before{content:'C'}.icon-floppy:before{content:'D'}.icon-warning-alt:before{content:'E'}.icon-video:before{content:'F'}.icon-bulk:before{content:'G'}.icon-vunfold:before{content:'H'}.icon-tasks:before{content:'I'}.icon-kanban:before{content:'J'}.icon-search:before{content:'K'}.icon-wiki:before{content:'L'}.icon-team:before{content:'M'}.icon-vfold:before{content:'N'}.icon-issues:before{content:'O'}.icon-iocaine:before{content:'P'}.icon-archive:before{content:'Q'}.icon-capslock:before{content:'R'}.icon-upload:before{content:'S'}.icon-github:before{content:'T'}.icon-timeline:before{content:'U'}.icon-scrum:before{content:'V'}.icon-project:before{content:'W'}.icon-heart:before{content:'X'}.icon-eye:before{content:'Y'}@-webkit-keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@-webkit-keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;flex:10}}@keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;-ms-flex:10;flex:10}}@-webkit-keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes blink{85%{opacity:1}100%{opacity:.6}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote cite,sup{font-size:.9rem}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{display:block}blockquote cite:before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}sup{vertical-align:super}.blocked-warning .icon,.icon,.us-story-main-data .us-title.blocked{vertical-align:middle}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}.pika-single{z-index:999999}.pika-single .pika-title{color:#212121}.pika-single .is-selected .pika-button{background:#000;border-radius:0!important;box-shadow:inset 0 1px 3px #000}.pika-single .is-today .pika-button{color:#000}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#212121!important;border-radius:0!important;box-shadow:inset 0 1px 3px #212121!important}fieldset{border:0;padding:0;width:100%}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{-webkit-transition:border .3s linear;transition:border .3s linear}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.icon-capslock{bottom:.6rem;color:#757575;display:none;position:absolute;right:1rem}.auth,.error-main{bottom:0;z-index:999;left:0}.admin-membership header:after{clear:both;content:'';display:table}.admin-membership .check input{height:40px;width:85px}.admin-attributes .admin-attributes-section .checksley-error-list li{font-weight:100}.admin-roles p{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#f5f5f5}.auth .logo,.auth .tagline{color:#fff;text-align:center}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.kanban,.taskboard{height:calc(100vh - 40px)}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,36,0,.7);position:absolute;width:100%}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.project-values-title{-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;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem;text-transform:uppercase}.project-values-title h2{margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.invitation-main .avatar,.invitation-main .invitation-container,.kanban{-webkit-box-orient:vertical;-webkit-box-direction:normal}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth .logo{font-size:3rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.auth .auth-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{padding:0 33%;text-align:center;width:100%}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{text-align:center}.auth .login-text a:hover,.auth .register-text a:hover{color:#212121}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moustache;animation-name:moustache;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;fill:rgba(0,0,0,.9);stroke:#212121;stroke-width:1px;-webkit-transform-origin:50% 20%;-ms-transform-origin:50% 20%;transform-origin:50% 20%;-webkit-transition:.3s;transition:.3s}.moustache:hover{fill:rgba(33,33,33,.9);-webkit-transition:.3s;transition:.3s}.list-itemtype-project .icon path,.list-itemtype-project .list-itemtype-track-likers.active path,.list-itemtype-project .list-itemtype-track-watchers.active path,.list-itemtype-ticket .icon path,.list-itemtype-ticket .list-itemtype-track-likers.active path,.list-itemtype-ticket .list-itemtype-track-watchers.active path,.list-itemtype-timeline .icon path,.list-itemtype-timeline .list-itemtype-track-likers.active path,.list-itemtype-timeline .list-itemtype-track-watchers.active path,.list-itemtype-user .icon path,.list-itemtype-user .list-itemtype-track-likers.active path,.list-itemtype-user .list-itemtype-track-watchers.active path{fill:currentcolor}@-webkit-keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}.backlog-menu{background:#f5f5f5;color:#212121;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .trans-button{color:#212121;display:inline-block;padding:.4rem 1.5rem}.backlog-menu .trans-button.active,.backlog-menu .trans-button:hover{background:#757575;color:#f5f5f5}.backlog-menu .trans-button.active:hover{background:#c2c2c2}.backlog-menu .trans-button.move-to-current-sprint{display:none}.invitation-main,.invitation-main .invitation-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-menu .button-bulk{margin-left:.2rem}.invitation-main{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;-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;background-size:cover;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;z-index:999}.invitation-main .invitation-form .forgot-pass{font-size:.9rem}.invitation-main .avatar .person-name,.invitation-main .invitation-text,.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-weight:100;font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.invitation-main .invitation-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar .person-name{color:#fff}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{color:#fff;text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{color:#f5f5f5;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header,.invitation-main .register-text{color:#fff}.invitation-main .login-form,.invitation-main .register-form{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .register-text a{color:#000}.invitation-main .button-auth{display:block}.error-main,.kanban{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.invitation-main .button-blackish:hover{background:#000}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.issues .filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:260px}.issues .filters-inner{opacity:1;padding:1rem}.kanban{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px)}.kanban header{min-height:70px}.kanban .burndown-container{display:none}.error-main{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.taskboard-inner,.us-story-main-data header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table,.taskboard-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal}.error-main .error-container{color:#fff;-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff;margin-bottom:3rem}.error-main a{color:#000}.error-main a:hover{color:#212121}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.taskboard-inner{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.team h2{margin:1rem 0}.team h2 span:last-child{color:#000}.us-story-main-data .us-title .block-desc-container,.us-story-main-data .us-title .us-related-task{font-size:.9rem}.us-story-main-data .us-title,.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{font-size:1.2rem}.blocked-warning .blocked,.blocked-warning .icon,.issue-nav a,.us-story-main-data .us-title .us-name,.us-story-main-data .us-title .us-number{font-size:2rem}.blocked-warning .blocked,.us-story-main-data .us-title .us-number{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.us-story-main-data .us-title{font-weight:400;font-family:opensans-regular,Arial,Helvetica,sans-serif}.us-story-main-data .us-title .block-description-title,.us-story-main-data .us-title.blocked .unblock{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.us-story-main-data{margin-bottom:2rem}.us-story-main-data header{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.us-story-main-data .us-title{background:#f5f5f5;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked{background:#ff2400;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked .us-title-text,.us-story-main-data .us-title.blocked input{margin-bottom:.5rem}.us-story-main-data .us-title.blocked .us-name,.us-story-main-data .us-title.blocked .us-number,.us-story-main-data .us-title.blocked .us-related-task{color:#fff}.us-story-main-data .us-title.blocked a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title.blocked a:hover{color:#ff0062}.us-story-main-data .us-title.blocked .unblock{color:#fff;float:right}.us-story-main-data .us-title.blocked .unblock:hover{color:#ff0062;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title p{margin-bottom:0}.us-story-main-data .us-title .us-edit-name-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.us-story-main-data .us-title .edit-subject{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.basic-table,.us-story-main-data .us-title .us-title-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.us-story-main-data .us-title input{background:#fff;-webkit-box-flex:9;-webkit-flex-grow:9;-ms-flex-positive:9;flex-grow:9}.us-story-main-data .us-title .save-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.us-story-main-data .us-title .us-title-text{-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;display:flex;margin-bottom:0;max-width:94%}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{max-height:1.5rem;max-width:1.5rem}.us-story-main-data .us-title .us-title-text:hover .icon-edit{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.us-story-main-data .us-title .us-number{color:#f5f5f5;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;line-height:2.2rem;margin-right:.5rem}.us-story-main-data .us-title .us-name{color:#212121;display:inline-block;line-height:2.2rem;padding-right:1rem;width:100%}.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{color:#f5f5f5;margin-left:.5rem}.us-story-main-data .us-title .icon-edit{opacity:0}.us-story-main-data .us-title .us-related-task{color:#f5f5f5;margin-top:.5rem}.us-story-main-data .us-title .us-related-task a{border-left:1px solid #f5f5f5;padding:0 .2rem}.us-story-main-data .us-title .us-related-task a:hover{color:#000}.us-story-main-data .us-title .us-related-task a:first-child{border:0}.us-story-main-data .us-title .block-description-title{color:#fff;margin-right:.5rem}.us-story-main-data .us-title .block-description{color:#fff;display:inline-block;margin-right:5rem}.blocked-warning{margin-bottom:1rem}.blocked-warning .blocked{color:#ff2400;line-height:2.5rem;margin-bottom:.5rem}.blocked-warning .block-description{color:#212121;margin:0}.duty-content .edit-description,.wiki-content,.wysiwyg{margin-bottom:2rem}.issue-nav{position:absolute;right:1rem;top:1rem}.duty-content{position:relative}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#212121}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#f5f5f5}.duty-content textarea{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-content .edit{color:#212121}.duty-content .view-description .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .save{top:.4rem}.duty-content .edit-description .edit{position:absolute;right:2.5rem;top:.4rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.wysiwyg textarea{background:#fff;max-height:none}.wiki .remove{font-size:.9rem;color:#f5f5f5}.wiki .remove:hover span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove:hover .icon{color:#ff2400;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove .icon{color:#f5f5f5;margin-right:.2rem}.wiki-content{position:relative}.wiki-content.editable:hover .wysiwyg{background:#f5f5f5;cursor:pointer}.wiki-content .view-wiki-content:hover .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .view-wiki-content .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .icon:hover{color:#212121;opacity:.3;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .preview-icon{position:absolute;right:3.5rem}.wiki-content .edit-wiki-content .action-container{position:absolute;right:1rem;top:.3rem}.wiki-content .edit-wiki-content .edit{position:absolute;right:3.5rem;top:.4rem}.wiki-content .preview{padding-top:1.8rem}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row,.card-placeholder .placeholder-avatar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table .row,.empty-burndown,.loading-bar{-webkit-box-orient:horizontal}.basic-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:flex;-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;padding:.3rem 0;text-align:left;width:100%}.basic-table .row .width-1{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:4;-webkit-flex-grow:4;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:5;-webkit-flex-grow:5;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:7;-webkit-flex-grow:7;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.beta{left:0;position:absolute;top:0;z-index:9999}.button,.button-auth,.button-blackish,.button-bulk,.button-gray,.button-green,.button-red,.trans-button,a.button-gray,a.button-green{font-weight:100;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:0 0;border:0;color:#fff;cursor:pointer;display:inline-block;padding:.4rem 2rem;text-align:center;text-transform:uppercase;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.trans-button{font-size:1rem}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button:hover,.trans-button:hover{color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.trans-button span{-webkit-animation:loading .5s linear;animation:loading .5s linear}.button span,.button-auth span,.button-blackish span,.button-bulk span,.button-gray span,.button-green span,.button-red span,.trans-button span{color:#fff}.button .icon,.button-auth .icon,.button-blackish .icon,.button-bulk .icon,.button-gray .icon,.button-green .icon,.button-red .icon,.trans-button .icon{color:#fff;margin-right:.3rem}.trans-button .icon,.trans-button span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}.trans-button.active .icon,.trans-button.active span,.trans-button:hover .icon,.trans-button:hover span{color:#000}.trans-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#000}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#212121;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#212121;color:#fff}.button-blackish{background:#212121;color:#f5f5f5}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff0062}.button-red:hover{background:#ff2400;color:#fff}.button-red .icon{color:#fff}.button-block{background:#fff;color:#ff2400}.button-block:hover{background:#ff0062;color:#fff}.button-bulk{background:#000;padding:.35rem .5rem}.button-bulk .icon{margin-right:0}.button-auth,.button-bulk:hover{background:#212121}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.card-placeholder{background:#f0f0f0;border:1px dashed #e1e1e1;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:flex}.card-placeholder .image{background:#e1e1e1;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.card-placeholder .line{background:#e1e1e1;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#dcdcdc;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:500px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.check input+div{background-color:#757575;height:25px;-webkit-transition:all .2s linear;transition:all .2s linear;width:50%}.check input~.check-text{font-weight:400;font-size:.9rem;font-family:opensans-regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#212121;margin-left:50%;-webkit-transition:all .2s linear;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.single-filter,.ticket-created-by .created-by .created-title.editable{cursor:pointer}.check input:disabled+div{background-color:#f5f5f5}.ticket-created-by{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;margin-top:.5rem;position:relative}.ticket-created-by .user-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-weight:100;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;line-height:1.5}.ticket-created-by .created-by .created-title{color:#000}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover,.ticket-estimation .popover a,.ticket-estimation .popover.fix,.ticket-estimation .popover.fix a,.ticket-estimation .ticket-role-points .role{font-size:.9rem}.ticket-estimation .ticket-role-points .points{font-weight:400;font-size:1.6rem}.ticket-estimation .points-per-role{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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}.ticket-estimation .ticket-role-points{background:rgba(245,245,245,.1);border-radius:2px;color:rgba(33,33,33,.3);-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:.1rem;padding:.5rem 0 .1rem;position:relative;text-align:center;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .ticket-role-points.active{background:rgba(33,33,33,.9);color:#f5f5f5}.ticket-estimation .ticket-role-points:first-child{background:rgba(33,33,33,.25);border-radius:0;color:#f5f5f5}.ticket-estimation .ticket-role-points:last-child{border:0}.ticket-estimation .ticket-role-points .points{font-family:opensans-regular,Arial,Helvetica,sans-serif;display:block;text-align:center}.ticket-estimation .ticket-role-points .role{max-width:90%;overflow:hidden;display:inline-block;text-align:center}.ticket-estimation .popover{background:#212121;color:#fff;display:none;left:35%;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover a{border-bottom:1px solid #212121;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;content:'';height:10px;left:10px;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#212121;color:#fff}.ticket-estimation .popover.fix{background:#212121;color:#fff;display:none;left:-160px;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover.fix a{border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;content:'';height:10px;left:90%;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.single-filter{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem;opacity:.5;position:relative}.single-filter:after{clear:both;content:'';display:table}.single-filter.active,.single-filter.selected,.single-filter:hover{color:#212121;opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{background:#dcdcdc;display:block;width:100%}.single-filter .number{background:#c2c2c2;position:absolute;right:0;top:0}.single-filter .icon-delete{color:#212121;position:absolute;right:.5rem;top:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.single-filter .icon-delete:hover{color:#ff2400;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task .task-name{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.kanban-task .avatar a,.kanban-task .task-text,.kanban-task-maximized .task-archived p,.kanban-task-maximized .task-points,.kanban-task-minimized .task-archived{font-size:.9rem}.kanban-task-minimized .icon-drag-h{font-size:1rem}.kanban-task .icon-drag-h,.kanban-task .icon-edit{font-size:1.2rem}.kanban-task{background:#F0EFD1;border:1px solid #000;box-shadow:none;cursor:move;margin:.2rem;position:relative}.kanban-task:last-child{margin-bottom:0}.kanban-task:hover .icon-drag-h,.kanban-task:hover .icon-edit{color:#000;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.kanban-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.kanban-task.ui-sortable-placeholder{background:#212121}.kanban-task.blocked{background:#ff2400;border:1px solid #cc1d00;color:#fff}.kanban-task.blocked a,.kanban-task.blocked span{color:#fff}.kanban-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.kanban-task .kanban-tagline{border-color:#000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:.6rem}.kanban-task .kanban-tag{border-top:.3rem solid #000;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.kanban-task .kanban-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.kanban-task .avatar-wrapper{-webkit-flex-basis:55px;-ms-flex-preferred-size:55px;flex-basis:55px;-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;width:55px}.kanban-task .avatar-wrapper img{width:100%}.kanban-task .avatar a{text-align:center}.kanban-task .avatar img{margin:0 auto}.kanban-task .avatar img:hover{border:2px solid #000;-webkit-transition:border .3s linear;transition:border .3s linear}.kanban-task .task-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 .5rem 0 .8rem}.kanban-task .task-assigned{color:#000;display:block}.kanban-task .task-num{color:#212121;margin-right:.3rem}.kanban-task .loading{bottom:.5rem;position:absolute}.kanban-task .icon-drag-h,.kanban-task .icon-edit{color:#000;opacity:0;position:absolute;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.kanban-task .icon-drag-h:hover,.kanban-task .icon-edit:hover{color:#000;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task-maximized .task-archived{background:#e8e8e8;padding:.5rem;text-align:left;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived:hover{background:#e1e1e1;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-maximized .task-archived span{color:#f5f5f5}.kanban-task-maximized .task-archived p{color:#f5f5f5;margin:0}.kanban-task-maximized .task-archived p:last-child{color:#757575;margin:.5rem 0;text-align:center}.kanban-task-maximized .icon-edit,.kanban-task-maximized .loading{bottom:.2rem;right:.5rem}.kanban-task-maximized .icon-drag-h{font-size:2rem;bottom:.2rem;cursor:move;right:45%}.kanban-task-maximized .task-points{color:#000;margin:0}.kanban-task-maximized .task-points span{display:inline-block}.kanban-task-maximized .task-points span:first-child{padding-right:.2rem}.kanban-task-maximized .task-points .points-text{text-transform:lowercase}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{line-height:1.4;text-transform:none}.kanban-task-maximized .kanban-tag{border-top:.3rem solid}.kanban-task-minimized .kanban-task-inner{padding:0 .3rem}.kanban-task-minimized .task-archived{background:#e8e8e8;padding:.3rem;text-align:left}.kanban-task-minimized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-minimized .task-archived span{color:#f5f5f5}.kanban-task-minimized .task-archived .task-name{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-itemtype-project .icon svg,.list-itemtype-ticket .icon svg,.list-itemtype-timeline .icon svg,.list-itemtype-user .icon svg,.loading-spinner{max-height:1rem;max-width:1rem}.kanban-task-minimized .task-archived p{color:#f5f5f5;margin:0}.kanban-task-minimized .task-archived p:last-child{display:none}.kanban-task-minimized .task-num{vertical-align:top}.kanban-task-minimized .task-name{display:inline-block;overflow:hidden;width:135px}.kanban-task-minimized .task-points{display:none}.kanban-task-minimized .icon-drag-h,.kanban-task-minimized .icon-edit{top:1.4rem}.kanban-task-minimized .icon-edit{bottom:.2rem;right:1rem}.kanban-task-minimized .icon-drag-h{cursor:move;right:.1rem;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-task-minimized .kanban-tag{border-top:.2rem solid}.level{background-color:#f5f5f5;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project p,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user .extra-info,.list-itemtype-user p{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{font-weight:400;font-family:opensans-regular,Arial,Helvetica,sans-serif}.list-itemtype-project .list-itemtype-track,.list-itemtype-ticket .list-itemtype-track,.list-itemtype-timeline .list-itemtype-track,.list-itemtype-user .extra-info,.list-itemtype-user .list-itemtype-track{font-size:.9rem}.list-itemtype-ticket h2{font-size:1rem}.list-itemtype-project h2,.list-itemtype-user h2,.loader p{font-size:1.2rem}.list-itemtype-project{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#000}.list-itemtype-project h2,.list-itemtype-project p{margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-project-members,.list-itemtype-project .list-itemtype-project-tags{-webkit-align-self:flex-end;-ms-flex-item-align:end;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .list-itemtype-project-members{align-self:flex-end;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-project .list-itemtype-project-tags{align-self:flex-end;display:flex;-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5rem}.list-itemtype-project .tag{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket h2,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user h2,.list-itemtype-user p{margin-bottom:0}.list-itemtype-ticket,.list-itemtype-timeline,.list-itemtype-user{border-bottom:1px solid #f5f5f5;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user,.list-itemtype-user .list-itemtype-track{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#000}.list-itemtype-ticket .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .list-itemtype-avatar img{width:100%}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-project{color:#f5f5f5}.list-itemtype-ticket .list-itemtype-ticket-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-id{color:#f5f5f5;margin-right:.3rem}.list-itemtype-user{display:flex}.list-itemtype-user .list-itemtype-track{color:#f5f5f5;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#000}.list-itemtype-user .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .list-itemtype-avatar img{width:100%}.list-itemtype-user .extra-info{margin-top:.25rem}.list-itemtype-timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-timeline .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-timeline .list-itemtype-track-likers,.list-itemtype-timeline .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track-likers .icon,.list-itemtype-timeline .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-timeline .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-timeline .list-itemtype-track-likers.active,.list-itemtype-timeline .list-itemtype-track-watchers.active{color:#000}.list-itemtype-timeline h2{margin-bottom:0}.admin-menu li,.empty-backlog .title,.empty-burndown .title,.sprints-empty .title,.taskboard-table-header .task-colum-name,.ticket-data .ticket-title,.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,tg-project-menu{text-transform:uppercase}.list-itemtype-timeline .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.loader p{color:#757575;text-align:center}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar,.notification-light{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.loading-bar{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:loadBar;animation-name:loadBar;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;background:#757575;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{-webkit-animation-delay:0s;animation-delay:0s;background:#ffc107}.loading-bar .item-1{-webkit-animation-delay:1s;animation-delay:1s;background:#009688}.loading-bar .item-2{-webkit-animation-delay:2s;animation-delay:2s;background:#e91e63}.loading-bar .item-3{-webkit-animation-delay:3s;animation-delay:3s;background:#9c27b0}.loading-bar .item-4{-webkit-animation-delay:4s;animation-delay:4s;background:#cddc39}.loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}a.help-button,a.help-markdown{font-size:.9rem;color:#f5f5f5}a.help-button:hover .icon,a.help-button:hover span,a.help-markdown:hover .icon,a.help-markdown:hover span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button .icon,a.help-markdown .icon{color:#f5f5f5;margin-right:.2rem}.markItUpHeader ul{background:#f5f5f5;padding:.3rem}.markItUpHeader ul li{display:inline-block;float:none}.markItUpHeader ul li a{opacity:.8}.markItUpHeader ul li a:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.markItUpHeader ul .preview-icon{position:absolute;right:2.5rem}.markItUpContainer{padding:0}.markdown{position:relative}.preview .actions{background:#f5f5f5;margin-top:.5rem;min-height:2rem;padding:.3rem}.notification-light p{font-weight:100;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.notification-message-success .warning{font-size:1.2rem;color:#fff;line-height:1.2}.notification-message-error .warning{font-size:2rem;color:#fff;line-height:2.4rem}.notification-message-error .icon-notification-error{font-size:3rem;display:inline;vertical-align:sub}.notification-message-error .warning,.notification-message-success .warning{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.notification-message-success{background:rgba(33,33,33,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);opacity:1;right:-370px;top:2%;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{-webkit-animation:animSlide 2s linear both;animation:animSlide 2s linear both;opacity:1}.notification-message-success p{margin:0}@-webkit-keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-light,.notification-message-error{-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%)}.notification-message-error{background:rgba(255,36,0,.9);top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error.inactive{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-light p,.notification-message-error .text p{margin:0}.notification-message-error .icon-delete{color:#fff;position:absolute;right:1rem;top:1rem}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(245,245,245,.95);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;padding:1rem;position:absolute;top:0;transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s;width:100%;z-index:99999}.paginator ul,.summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.notification-light.inactive{opacity:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s}.notification-light.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s;transition:all .6s}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{margin-right:1rem;width:2rem}.notification-light .close path{fill:#fff}.notification-message-light-error{background:rgba(255,36,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator .dots,.paginator a{background:#f5f5f5;color:#fff;padding:.5rem 1rem;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .active span,.paginator a:hover{background:#212121}.paginator a:hover{color:#fff;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .dots{background:0 0;color:#f5f5f5}.v-pagination-list{overflow:hidden}.v-pagination-next,.v-pagination-previous{background-color:#757575;color:#f5f5f5;display:block;padding:.1rem 0;text-align:center;visibility:hidden;width:100%}.select-color,.select-color:after{background:#212121;position:absolute}.v-pagination-next:hover,.v-pagination-previous:hover{background-color:#212121;-webkit-transition:background .3s linear;transition:background .3s linear}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.private{display:inline-block;margin-left:.5rem;width:.5rem}.private svg{height:.5rem;width:.5rem}.private path{fill:#f5f5f5;-webkit-transition:fill .3s linear;transition:fill .3s linear}.select-color{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;border-radius:0 10px 10px 0;padding:15px}.select-color,.select-color a{font-size:.9rem}.select-color input{font-weight:400;font-size:1rem}.select-color a{border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#f5f5f5;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background-color:#f5f5f5;width:243px}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#f5f5f5;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.empty-burndown,.empty-burndown .title,.summary .description{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.empty-burndown a,.summary .number{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.summary .description{font-size:.9rem}.empty-burndown .title{font-size:1.2rem}.summary{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;padding:1em}.summary .summary-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#212121}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{line-height:1}.summary .stats{cursor:pointer;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .color-line,.summary .stats:hover .graph{fill:#212121;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats.active .color-line,.summary .stats.active .white-line{display:none}.summary .stats.active .graph{fill:#000}.summary .stats svg{height:100%;width:100%}.summary .stats .color-line,.summary .stats .graph{fill:#c2c2c2;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats .white-line{fill:#212121}.empty-burndown path,.track-button.active .track-icon path{fill:#000}.summary .stats .color-line,.summary .stats .white-line{display:block}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#212121;height:24px}.summary-progress-bar .defined-points{background:#ff0062;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#212121;height:24px;position:absolute}.large-summary{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.large-summary .large-summary-wrapper{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.large-summary .summary-progress-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.empty-burndown,.taskboard-task .taskboard-tagline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.large-summary .summary-progress-bar{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats-divider{margin-right:2rem}.large-summary .icon{font-size:1.4rem;margin-right:.4rem}.large-summary .icon.icon-stats{color:#000;float:right;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#212121;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#212121}.large-summary .icon.icon-stats.active:hover{color:#000;-webkit-transition:color .3s linear;transition:color .3s linear}.empty-burndown{-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;background:rgba(0,0,0,.15);display:flex;-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;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{-webkit-flex-basis:5rem;-ms-flex-preferred-size:5rem;flex-basis:5rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;width:5rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.empty-burndown .title{color:#000;margin:0}.empty-burndown a{-webkit-animation:blink 2s infinite;animation:blink 2s infinite}.graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.wysiwyg,.wysiwyg .codehilite{overflow:auto}.graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;-webkit-transition:none;transition:none}.tag{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-radius:0 5px 5px 0;color:#212121;display:inline-block;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.tag,.tags-block .add-tag-text,.tags-block .tag{font-size:.9rem}.tags-block .icon-plus{font-size:1.2rem}.tag .icon-delete{color:#f5f5f5;margin-left:1rem}.tag .icon-delete:hover{color:#ff2400}.ui-autocomplete{background:#fff;border:1px solid #f5f5f5;z-index:99910}.ui-autocomplete .ui-state-focus{background:#212121}.ui-autocomplete li{cursor:pointer}.ui-helper-hidden-accessible{display:none}.tags-block .tags-container{display:inline-block}.tags-block input{padding:.4rem;width:14rem}.tags-block .tag{margin:0 .5rem .5rem 0;padding:.5rem}.tags-block .add-tag{color:#f5f5f5}.tags-block .add-tag:hover{color:#212121}.taskboard-task .task-name{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.taskboard-task .task-assigned,.taskboard-task .taskboard-text,.taskboard-task .taskboard-user-avatar a{font-size:.9rem}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit,.taskboard-task .icon-iocaine{font-size:1.2rem}.taskboard-task{background:#F0EFD1;border:1px solid #000;box-shadow:none;cursor:move;margin:.2rem;position:relative}.taskboard-task:hover .icon-drag-h,.taskboard-task:hover .icon-edit{color:#000;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.taskboard-task.ui-sortable-placeholder{background:#212121}.taskboard-task.blocked{background:#ff2400;border:1px solid #cc1d00;color:#fff}.taskboard-task.blocked a,.taskboard-task.blocked span,.taskboard-task.blocked:hover .icon-drag-h,.taskboard-task.blocked:hover .icon-edit{color:#fff}.taskboard-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.taskboard-task .taskboard-tagline{border-color:#000;display:flex;height:.6rem}.taskboard-task .taskboard-tag{border-top:.3rem solid #000;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.taskboard-task .taskboard-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.taskboard-task .taskboard-user-avatar{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:55px}.taskboard-task .taskboard-user-avatar a{display:block;text-align:center}.taskboard-task .taskboard-user-avatar img{margin:0 auto}.taskboard-task .taskboard-user-avatar img:hover{border:2px solid #000;-webkit-transition:border .3s linear;transition:border .3s linear}.taskboard-task .iocaine img{-webkit-filter:hue-rotate(150deg) saturate(200%);filter:hue-rotate(150deg) saturate(200%)}.taskboard-task .icon-iocaine{background:#000;border-radius:5px;color:#fff;left:.2rem;padding:.1rem;position:absolute;top:1rem}.taskboard-task .task-assigned{color:#000;display:block}.taskboard-task .task-assigned:hover{color:#000}.taskboard-task .task-num{color:#212121;margin-right:.5em}.taskboard-task .taskboard-text{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;padding:0 .5rem 0 1rem;word-wrap:break-word}.taskboard-task .icon{-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task .loading{bottom:.5rem;position:absolute}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit{bottom:.5rem;color:#000;opacity:0;position:absolute}.taskboard-task .icon-drag-h:hover,.taskboard-task .icon-edit:hover{color:#000}.taskboard-task .icon-edit,.taskboard-task .loading{right:1rem}.taskboard-task .icon-drag-h{font-size:2rem;cursor:move;right:45%}.task-drag{box-shadow:1px 1px 15px 6px rgba(0,0,0,.1)}.watch-options a{font-weight:100}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.track-button .track-inner{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border-radius:4px 0 0 4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;margin-right:.1rem;min-width:140px}.track-button .track-button-counter,.watch-options a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.track-button .track-inner:hover{background:#e8e8e8;-webkit-transition:background .3s;transition:background .3s}.track-button .track-inner span{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.track-button .track-inner .icon-arrow-up{margin-left:auto;padding:0 .5rem;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.track-button:hover{color:#212121}.track-button.active .track-inner{background:rgba(33,33,33,.2)}.track-button.watch-container{margin-right:1rem;position:relative}.track-button .track-icon{padding:.3rem .6rem .3rem .75rem}.track-button .track-icon svg{height:1.1rem;position:relative;top:2px;width:1.1rem}.track-button .track-icon path{fill:#212121}.track-button .track-button-counter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-width:2rem}.like-button.active.is-hover .track-inner,.watch-button.active.is-hover .track-inner{background:#ff2400;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.like-button.active.is-hover path,.watch-button.active.is-hover path{fill:#ff0062}.watch-options{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.admin-project-export-result .spin img,.ticket-assigned-to .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.watch-options li{margin:0}.assigned-to-list,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(245,245,245,.3);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.watch-options a.active{color:#212121}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check path{fill:#212121}.upvote-btn a.active path,.upvote-btn a:hover path{fill:#000}.upvote-btn{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#f5f5f5;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#000;-webkit-transition:background .3s;transition:background .3s}.upvote-btn a.active{background:rgba(33,33,33,.2);color:#000;-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover{background:#ff2400;color:#f5f5f5}.upvote-btn a.is-hover svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover path{fill:#ff0062}.sprints .add-sprint path,.upvote-btn path{fill:#f5f5f5}.upvote-btn svg{height:1rem;width:1rem}.upvote-btn span{display:block}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name{color:#212121;margin-left:.5rem}.assigned-to-list .user-list-single,.ticket-watchers .user-list-single{-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;background:0 0;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem .5rem .3rem;vertical-align:middle}.assigned-to-list .user-list-single:last-child,.ticket-watchers .user-list-single:last-child{border:0}.assigned-to-list .user-list-avatar,.ticket-watchers .user-list-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.assigned-to-list .user-list-single:hover{background:#949494;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{background:#8c8c8c;cursor:pointer;margin-bottom:1rem;position:relative;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.1s;transition-delay:.1s}.assigned-to-list .user-list-single.is-active .icon-delete{opacity:1;position:absolute;right:1rem;top:1.3rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-single:hover .icon-delete{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.ticket-watchers .icon-delete{opacity:0;position:absolute;right:.5rem;top:0;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.ticket-watchers .icon-delete:hover{color:#ff2400;-webkit-transition:color .3s ease-in;transition:color .3s ease-in}.wysiwyg code,.wysiwyg pre{font-size:.9rem}.wysiwyg h2{font-size:1.2rem;margin-bottom:.5rem}.wysiwyg h1{font-weight:400;font-size:2rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.wysiwyg h2,.wysiwyg h3{font-weight:800;font-family:opensans-semibold,Arial,Helvetica,sans-serif}.wysiwyg{line-height:1.4rem;padding:1rem}.wysiwyg h1{line-height:2.5rem}.wysiwyg ol,.wysiwyg ul{list-style-position:outside;margin-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;font-weight:700;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#000}.wysiwyg a:hover{color:#212121}.wysiwyg p{line-height:1.4rem;margin-bottom:1rem}.wysiwyg code,.wysiwyg pre{background:#3b3b3b;color:#f5f5f5;direction:ltr;font-family:'courier new',monospace;margin-bottom:1rem;overflow:auto;unicode-bidi:embed;white-space:pre}.admin-functionalities .functionality .title,.admin-membership-table .avatar .name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-membership-table .avatar figcaption span,.admin-submenu ul a span,.admin-submenu-roles .single-role,.admin-webhooks .webhook-url span,.custom-fields-table .custom-description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wysiwyg pre{line-height:1.4rem;padding:.5rem}.wysiwyg table{border:1px solid #f5f5f5;margin-bottom:1rem}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#f5f5f5 1px solid}.wysiwyg th{border-right:#f5f5f5 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#f5f5f5 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.admin-common .total{font-size:1.2rem;background-color:#f5f5f5;color:#444;padding:.3rem 1rem}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{margin-bottom:2rem}.admin-common .total:hover .edit-value{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0;padding:.5rem 0}.custom-fields-table .table-header{border-bottom:3px solid #f5f5f5}.custom-fields-table .table-header .custom-description span,.custom-fields-table .table-header .custom-name span{padding-left:1.1rem}.custom-fields-table .table-body form:last-child .row{border:0}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;-webkit-transition:background .2s linear;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag-v{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .table-body .custom-description{color:#b8b8b8}.custom-fields-table .single-custom-field{border-bottom:1px solid #f5f5f5;color:#555}.custom-fields-table .icon-drag-v{color:#b8b8b8;opacity:0;padding:0 .1rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .icon-drag-v:hover{color:#555;cursor:move;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{color:#555;margin-right:.5rem}.custom-fields-table .custom-name{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-description{max-width:100%;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.custom-fields-table .custom-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-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;opacity:0;text-align:center}.custom-fields-table .custom-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-fields-table form .custom-options-wrapper{opacity:1}.admin-functionalities form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.admin-functionalities .functionality{-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;background-color:#f5f5f5;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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.3rem;margin-right:.3rem;opacity:.5;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:top;width:32%}.admin-functionalities .functionality.active{background-color:rgba(114,161,20,.3);opacity:1}.admin-functionalities .functionality .icon{font-size:3rem;-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;margin:0 auto;min-width:60px}.admin-functionalities .functionality .desc{text-align:center;width:100%}.admin-functionalities .functionality .activate-input{display:none}.admin-functionalities .functionality .activate-input+label{color:#fff;cursor:pointer;display:block;text-align:center}.admin-functionalities .functionality .title{display:block}.admin-functionalities .functionality select{margin-top:1rem}.admin-functionalities .videoconference-attributes select{margin-bottom:.5rem}.admin-functionalities .button-green{color:#fff;display:block;text-align:center}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .delete,.admin-menu li{font-size:1.2rem}.admin-membership-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.admin-membership-table .avatar figcaption{margin-left:1rem;width:75%}.admin-membership-table .avatar figcaption span{width:100%}.admin-membership-table .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:35px}.admin-membership-table .avatar .email,.admin-membership-table .avatar .name{display:block;width:100%}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#f5f5f5}.admin-membership-table .resend{background-color:#72a114;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;-webkit-transition:background-color .3s linear;transition:background-color .3s linear}.admin-membership-table .delete:hover{color:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.admin-menu li{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #dcdcdc}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-result .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{width:100%}.admin-project-export-result h3{font-size:1.2rem;font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#b8b8b8;margin:.5rem 0;text-align:center}.project-details .privacy-settings label,.project-details input,.project-details label,.project-details textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.project-details form{max-width:700px;width:100%}.project-details fieldset{margin-bottom:1rem}.project-details label{display:block;margin-bottom:.2rem}.project-details textarea{height:10rem}.project-details .privacy-settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.project-details .privacy-settings>div{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;position:relative}.project-details .privacy-settings>div:first-child{margin-right:.5rem}.project-details .privacy-settings label{border:1px solid #b8b8b8;cursor:not-allowed;display:block;text-align:center;-webkit-transition:all .2s linear;transition:all .2s linear}.project-details .privacy-settings label span{color:#b8b8b8}.project-details .privacy-project{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.project-details .privacy-project:checked+label{background:#9dce0a;border:1px solid #9dce0a}.project-details .privacy-project:checked+label span{color:#fff}.project-details .button-green{color:#fff;display:block;text-align:center}.project-details .delete-project{font-size:.9rem;display:block;margin-top:1rem}.admin-roles .general-category{font-size:.9rem}.admin-roles .edit-value{font-size:1rem}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-roles .edit-value{color:#b8b8b8;cursor:pointer;margin-left:.5rem;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-roles .edit-role{background-color:#f5f5f5;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .edit-role .icon-floppy{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .edit-role .icon-floppy:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;display:inline-block}.admin-submenu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.admin-contrib .help .alt-image,.admin-contrib .help code,.admin-contrib .select-input-text .help-copy,.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-body span,.admin-webhooks .history-single-response-header a{font-size:.9rem}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a span{display:block;max-width:85%}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child,.admin-webhooks .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body .response-container,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-webhooks .table-header{border-bottom:1px solid #b8b8b8}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #f5f5f5}.admin-webhooks .webhooks-options{margin-bottom:1rem;text-align:right}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.admin-webhooks .webhook-url{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.admin-webhooks .webhook-url span{max-width:65%;color:#b8b8b8;display:inline-block;vertical-align:middle}.admin-contrib .help code,.admin-third-parties .help code{direction:ltr;line-height:1.4rem;unicode-bidi:embed;white-space:pre}.admin-webhooks .webhook-url a{color:#72a114;margin-left:.5rem}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;min-width:100px;text-align:center}.admin-webhooks .webhook-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.admin-webhooks .webhook-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .webhooks-history.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #f5f5f5;margin-left:22%}.admin-webhooks .history-single{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header a,.admin-webhooks .history-single-response-header span:first-child{color:#b8b8b8}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{-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;background:#f5f5f5;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-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.backlog-table-body,.backlog-table-header,.kanban-table,.taskboard-table,.wiki-summary .wiki-user-modification{-webkit-box-orient:vertical;-webkit-box-direction:normal}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{color:#b8b8b8;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{border:0;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib h2,.admin-contrib label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.admin-contrib .help h3,.admin-contrib .help ol span{font-family:opensans-semibold}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #f5f5f5;margin-bottom:1rem;padding-bottom:1rem}.admin-contrib .contrib-input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.admin-contrib .contrib-test{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:7.5rem;-ms-flex-preferred-size:7.5rem;flex-basis:7.5rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-left:.5rem;text-align:center}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .contrib-form-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-contrib .select-input-text .help-copy{opacity:0}.admin-contrib .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-contrib .check-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0}.admin-contrib .help{margin-top:2rem}.admin-contrib .help h3{margin-bottom:1rem}.admin-contrib .help ol{padding:0 0 0 2rem}.admin-contrib .help .img{margin-bottom:1rem}.admin-contrib .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-contrib .help .code-info{padding-left:1rem}.admin-contrib .help .code-info li{margin-bottom:.5rem}.admin-contrib .help .code-info span{font-family:opensans-semibold}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv .csv-regenerate-field a{font-size:.9rem;min-width:110px}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field .icon{margin-right:.3rem}.project-csv .field-with-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:1rem;width:100%}.project-csv .field-with-options input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row .icon,.project-values-settings a{font-size:1.2rem}.admin-third-parties .help .alt-image,.admin-third-parties .help code,.admin-third-parties .select-input-text .help-copy,.backlog-table-body .doom-line span,.backlog-table-body .pop-points,.backlog-table-body .pop-points a,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open a,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-body .pop-role,.backlog-table-body .pop-role a,.backlog-table-body .pop-status,.backlog-table-body .pop-status a,.backlog-table-body .row,.backlog-table-body .tags-block .tag,.backlog-table-header .pop-points,.backlog-table-header .pop-points a,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open a,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom a,.backlog-table-header .pop-role,.backlog-table-header .pop-role a,.backlog-table-header .pop-status,.backlog-table-header .pop-status a,.backlog-table-header .row,.login-form-container .forgot-pass,.register-form-container .register-text{font-size:.9rem}.project-values-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{color:#b8b8b8;opacity:0}.project-values-row .icon:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.project-values-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #f5f5f5}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-header .points,.login-form-container .remember-me+label{cursor:pointer}.project-values-body .project-values-row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.project-values-name{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.project-values-value{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{color:#555;margin-right:.5rem}.project-values-settings a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.project-values-settings a:hover .icon-delete{color:red}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.admin-third-parties .help h3,.admin-third-parties .help ol span{font-family:opensans-semibold}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p,.change-password-text{color:#444;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-third-parties .help{margin-top:2rem}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties .help h3{margin-bottom:1rem}.admin-third-parties .help ol{padding:0 0 0 2rem}.admin-third-parties .help .img{margin-bottom:1rem}.admin-third-parties .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-third-parties .help .code-info li,.cancel-account p{margin-bottom:.5rem}.admin-third-parties .help .code-info{padding-left:1rem}.admin-third-parties .help .code-info span{font-family:opensans-semibold}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-email-form p{margin-bottom:.5rem}.change-password-form-container .token-change-password{position:relative}.change-password-form-container input:focus+.get-token{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.change-password-form-container .get-token{font-size:.9rem;color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.change-password-form-container .get-token:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.login-form-container .forgot-pass{color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;-webkit-transition:all .3s linear;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.login-form-container .remember-me{vertical-align:top}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin-bottom:1rem;text-align:center}.backlog-table-header .backlog-table-title{font-size:1rem}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a,.empty-backlog .title{font-size:1.2rem}.backlog-table-body .doom-line span{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.backlog-table-body .pop-points,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-body .user-story-name a,.backlog-table-header .pop-points,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-role,.backlog-table-header .pop-status,.empty-backlog{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.backlog-table-body,.backlog-table-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-subtitle:hover,.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-subtitle:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-subtitle .input,.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-subtitle .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-webkit-flex-basis:25px;-ms-flex-preferred-size:25px;flex-basis:25px;-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}.backlog-table-body .backlog-table-subtitle .votes,.backlog-table-body .backlog-table-title .votes,.backlog-table-body .row .votes,.backlog-table-header .backlog-table-subtitle .votes,.backlog-table-header .backlog-table-title .votes,.backlog-table-header .row .votes{color:#555;-webkit-flex-basis:65px;-ms-flex-preferred-size:65px;flex-basis:65px;-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-align:center}.backlog-table-body .backlog-table-subtitle .votes.inactive,.backlog-table-body .backlog-table-title .votes.inactive,.backlog-table-body .row .votes.inactive,.backlog-table-header .backlog-table-subtitle .votes.inactive,.backlog-table-header .backlog-table-title .votes.inactive,.backlog-table-header .row .votes.inactive{color:#b8b8b8}.backlog-table-body .backlog-table-subtitle .votes.is-voted,.backlog-table-body .backlog-table-title .votes.is-voted,.backlog-table-body .row .votes.is-voted,.backlog-table-header .backlog-table-subtitle .votes.is-voted,.backlog-table-header .backlog-table-title .votes.is-voted,.backlog-table-header .row .votes.is-voted{color:#9dce0a}.backlog-table-body .backlog-table-subtitle .user-stories,.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-subtitle .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{overflow:hidden;width:100%}.backlog-table-body .backlog-table-subtitle .status,.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-subtitle .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-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}.backlog-table-body .backlog-table-subtitle .points,.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-subtitle .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-webkit-flex-basis:125px;-ms-flex-preferred-size:125px;flex-basis:125px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point,.empty-backlog,.sprints .loading,.sprints .sprint-table .sprint-empty{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{color:#b8b8b8;margin-left:.2rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px 3rem 10px 10px;position:absolute;width:150px;z-index:99}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{background:#050505;bottom:0;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:auto;width:200px;z-index:99}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .user-story-name,.sprints .sprint-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:opensans-regular,Arial,Helvetica,sans-serif;border-bottom:2px solid #b8b8b8;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:30px}.backlog-table-header .header-points span{color:#b8b8b8}.backlog-table-body .row{border-bottom:1px solid #ebebeb;cursor:move;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in;-webkit-transition-delay:.2s;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag-v,.backlog-table-body .row:hover .us-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .is-checked,.backlog-table-body .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.backlog-table-body .user-story-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .doom-line{background:red;margin:.2rem 0;padding:.6rem 0;position:relative;width:100%}.backlog-table-body .doom-line span{color:#fff;position:absolute;right:.5rem;top:-3px}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in;width:30px}.backlog-table-body .icon-drag-v:hover,.backlog-table-body .us-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .us-settings{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 0 0 2rem;opacity:0}.backlog-table-body .icon-drag-v{cursor:move;opacity:0;padding:.1rem .5rem 0 0}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.empty-backlog{padding:2rem}.empty-backlog img{margin-bottom:1rem}.empty-backlog .title{margin-bottom:.5rem}.empty-backlog a{color:#72a114}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint .description{font-size:.75rem}.sprints .filter-closed-sprints,.sprints .sprint-table .column-us,.sprints .us-item-row .user-story-name{font-size:.9rem}.sprints .sprint .number,.sprints .sprint .sprint-date,.sprints .sprint-name a,.sprints-empty .title{font-size:1.2rem}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint-header{-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;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#72a114;padding:.25rem .25rem 0;-webkit-transition:background .2s;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading-spinner{border:0;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.sprints .sprint-name a{max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;margin-right:3px}.sprints .sprint{margin-bottom:2rem;overflow:hidden}.sprints .sprint header{position:relative}.sprints .sprint:hover .icon-edit{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.sprints .sprint .icon{display:inline-block}.sprints .sprint .icon-arrow-up{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:baseline}.sprints .sprint .icon-arrow-up.active{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.sprints .sprint .icon-arrow-up:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.sprints .sprint .icon-edit{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;vertical-align:baseline}.sprints .sprint .icon-edit:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.sprints .sprint .description{line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{color:#b8b8b8;-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1}.sprints .sprint .sprint-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.sprints .sprint ul{margin:0}.sprints .sprint li{display:inline-block}.sprints .sprint li:first-child{margin-right:3px}.sprints .sprint-progress-bar{background:#b8b8b8;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#72a114;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table .sprint-empty{background:#e6e6e6;border:2px dashed #d2d2d2;color:#555;padding:1rem}.sprints .sprint-table .row{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:#d7d7d7;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .row.readonly,.taskboard-table .taskboard-task.readonly{cursor:auto}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.sortable-placeholder{background:#d7d7d7;height:40px}.sprints .sprint-table .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .column-us{-webkit-flex-flow:3;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.sprints .sprint-table .us-name.closed{color:#c5c5c5}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#c5c5c5}.sprints .sprint-table .column-points.blocked{color:red}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .icon-drag-v,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input,.taskboard-table-body .column-fold .taskboard-task .icon,.taskboard-table-body .column-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .column-fold .taskboard-task .taskboard-text,.taskboard-table-body .row-fold .taskboard-task .icon,.taskboard-table-body .row-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .row-fold .taskboard-task .taskboard-text{display:none}.sprints .us-item-row .user-story-name{line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#b8b8b8}.sprints-empty a,.taskboard-table-header .task-colum-name .icon:hover{color:#72a114}.sprint-closed .sprint-progress-bar .current-progress{background:#9f9f9f}.sprint-closed .button-gray{background:#b8b8b8}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{margin-bottom:.5rem}.taskboard-userstory-box .points-value{font-size:.9rem}.taskboard-table-header .task-colum-name .icon{font-size:1rem}.taskboard-table-header .task-colum-name,.taskboard-userstory-box .us-title{font-size:1.2rem}.taskboard-table-body .column-fold .taskboard-task,.taskboard-table-body .row-fold .taskboard-task{background:0 0;border:0;margin:0;min-height:0}.taskboard-table-body .column-fold .taskboard-task .taskboard-task-inner,.taskboard-table-body .row-fold .taskboard-task .taskboard-task-inner{padding:.2rem}.taskboard-table-body .column-fold .taskboard-task .avatar,.taskboard-table-body .row-fold .taskboard-task .avatar{height:35px;width:35px}.taskboard-table-body .column-fold .taskboard-task.ui-sortable-helper,.taskboard-table-body .row-fold .taskboard-task.ui-sortable-helper{box-shadow:none}.taskboard-table-body .column-fold .task-column,.taskboard-table-body .row-fold .task-column,.taskboard-table-body .task-column.column-fold,.taskboard-table-body .task-column.row-fold{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;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-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link,.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table,.taskboard-table-header .taskboard-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;overflow:hidden}.taskboard-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%}.taskboard-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:flex;position:absolute}.taskboard-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;width:300px}.taskboard-table-header .task-colum-name:last-child{margin-right:0}.taskboard-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-header .task-colum-name .icon.hfold,.taskboard-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.taskboard-table-header .task-colum-name.column-fold{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table-header .task-colum-name.column-fold span{display:none}.taskboard-table-header .task-colum-name.column-fold .hfold,.taskboard-table-header .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table-body{height:100%;overflow:auto;width:100%}.taskboard-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 10px 0 0;max-width:300px;width:300px}.taskboard-table-body .task-column:last-child{margin-right:0}.taskboard-table-body .column-fold .taskboard-task{max-width:40px;width:40px}.taskboard-table-body .task-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;min-height:10rem;width:100%}.taskboard-table-body .avatar-task-link,.taskboard-table-body .task-row.row-fold .icon-bulk,.taskboard-table-body .task-row.row-fold .icon-plus,.taskboard-table-body .task-row.row-fold .points-value{display:none}.taskboard-table-body .task-row:hover .new-task{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.taskboard-table-body .task-row.blocked .taskboard-userstory-box{background:rgba(255,0,0,.6)}.taskboard-table-body .task-row.blocked .points-value,.taskboard-table-body .task-row.blocked .points-value:hover,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a:hover{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.taskboard-table-body .task-row.blocked .taskboard-tasks-box{background:rgba(255,0,0,.1)}.taskboard-table-body .task-row.row-fold{min-height:0}.taskboard-table-body .task-row.row-fold .us-title{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskboard-table-body .taskboard-userstory-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-table-body .taskboard-userstory-box .icon{color:#b8b8b8;position:absolute;right:.5rem;top:.7rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-body .taskboard-userstory-box .icon:hover{color:#72a114}.taskboard-table-body .taskboard-userstory-box .icon.icon-plus{right:2rem}.taskboard-table-body .taskboard-userstory-box .icon.icon-vfold,.taskboard-table-body .taskboard-userstory-box .icon.icon-vunfold{left:0;right:inherit}.taskboard-table-body .avatar-assigned-to{display:block}.taskboard-userstory-box{position:relative}.taskboard-userstory-box .tag-list{display:none;margin-bottom:1rem}.attachments-header,.ticket-assigned-to{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.taskboard-userstory-box .us-title{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-userstory-box .points-value{color:#b8b8b8}.taskboard-userstory-box .points-value span{margin-right:.1rem}.points-list a{color:#72a114;margin-left:.5rem}.points-list a:hover span{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.points-list span{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem}.ticket-assigned-to{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;margin-bottom:1rem;position:relative}.ticket-assigned-to:hover .assigned-to .icon-delete{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;margin:1rem auto;max-height:2rem;max-width:2rem}.attachments,.duty-custom-fields{margin-bottom:2rem}.ticket-assigned-to .user-avatar{-webkit-flex-basis:4rem;-ms-flex-preferred-size:4rem;flex-basis:4rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .assigned-to{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.attachments-header .attachments-title,.colors-table .table-header,.single-attachment .attachment-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.ticket-assigned-to .assigned-to .user-assigned{font-size:1.2rem;color:#72a114;cursor:default;line-height:1.5rem}.ticket-assigned-to .assigned-to .user-assigned.editable{cursor:pointer}.ticket-assigned-to .assigned-to .user-assigned .icon{vertical-align:middle}.ticket-assigned-to .assigned-to .assigned-name{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ticket-assigned-to .assigned-to .icon-delete{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0}.ticket-assigned-to .assigned-to .icon-delete:hover{color:red}.add-attach span,.more-attachments,.single-attachment,.single-attachment .editable-attachment-comment{font-size:.9rem}.attachments-header .attachments-title{font-size:1rem;color:#444}.attachments-header .icon,.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings,.single-attachment .icon-delete{font-size:1.2rem}.attachments-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.attachments-header .attachments-num,.attachments-header .attachments-text{margin-right:.1rem}.attachments-header .icon{color:#444;cursor:pointer}.attachments-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.single-attachment{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem 1rem;position:relative}.category-config,.more-attachments{border-bottom:1px solid #b8b8b8}.single-attachment:hover .attachment-settings .settings{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.single-attachment.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.single-attachment.deprecated,.single-attachment.deprecated .attachment-name a{color:#b8b8b8}.single-attachment.sortable-placeholder{background:#f5f5f5;height:40px}.single-attachment .attachment-name{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:1rem}.single-attachment .attachment-name .icon{margin-right:.5rem}.single-attachment .attachment-size{color:#b8b8b8;-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem}.single-attachment .attachment-comments,.single-attachment .editable-attachment-comment{-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-comments span,.single-attachment .editable-attachment-comment span{color:#555}.single-attachment .attachment-settings{-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings{color:#b8b8b8;display:block;position:absolute}.single-attachment .attachment-settings .editable-settings:hover,.single-attachment .attachment-settings .settings:hover{color:#72a114}.single-attachment .attachment-settings .settings{opacity:0;top:.5rem}.single-attachment .attachment-settings .editable-settings{opacity:1;top:1rem}.single-attachment .attachment-settings .icon-edit,.single-attachment .attachment-settings .icon-floppy{right:3.5rem}.single-attachment .attachment-settings .icon-delete{right:2rem}.single-attachment .attachment-settings .icon-delete:hover{color:red}.single-attachment .attachment-settings .icon-drag-v{cursor:move;right:0}.single-attachment .icon-delete{color:#b8b8b8}.single-attachment .icon-delete:hover{color:red}.single-attachment .editable-attachment-deprecated{padding-left:1rem}.single-attachment .editable-attachment-deprecated span{color:#b8b8b8}.single-attachment .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.single-attachment .editable-attachment-deprecated input:checked+span{color:#444}.single-attachment .percentage{background:rgba(114,161,20,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.more-attachments{display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#72a114;margin-left:.5rem}.more-attachments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.add-attach{cursor:pointer;overflow:hidden;position:relative}.add-attach input{display:none}.category-config .category-item,.category-config .resume{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.add-attach span{color:#b8b8b8}.attachment-preview img{max-height:95vh;max-width:95vw}.category-config:first-child{border-top:1px solid #b8b8b8}.category-config .resume{-webkit-box-align:space-between;-webkit-align-items:space-between;-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:flex;padding:1rem;position:relative}.category-config .resume-title{width:280px}.category-config .count{color:#b8b8b8;float:left;padding-right:5px}.category-config .summary-role{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#b8b8b8;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#72a114}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .icon{font-size:2rem;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-align:right}.category-config .category-items{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden;background-color:#f5f5f5;width:100%}.category-config .category-items.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.colors-table .row,.duty-custom-fields .custom-fields-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #f5f5f5}.colors-table .icon,.colors-table .icon-check-square{font-size:1.2rem}.colors-table .table-header:hover{background:0 0}.colors-table .table-header .row{padding-left:50px}.colors-table form:last-child .row{border:0}.colors-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.colors-table .row:last-child{border:0}.colors-table .row.edition .current-color{cursor:pointer}.colors-table .row.edition,.colors-table .row.new-value{padding-left:50px}.colors-table .row.hidden{display:none}.colors-table .row .color-column{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.colors-table .row .status-name{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px;position:relative}.colors-table .row .status-name span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.colors-table .row .status-slug{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:130px;text-align:center}.colors-table .row .status-wip-limit{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#b8b8b8;border-radius:2px;height:40px;width:40px}.activity-single .activity-user img,.duty-custom-fields form input{width:100%}.colors-table .icon{color:#b8b8b8;margin-right:1rem;opacity:0}.colors-table .icon.icon-check-square,.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.colors-table .icon:hover{color:#72a114;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.colors-table .icon-delete:hover{color:red}.colors-table .icon-check-square{color:#72a114}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom{font-size:1.2rem;cursor:pointer;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom.open{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-fields-body{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.duty-custom-fields .custom-fields-body.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.duty-custom-fields .custom-field-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-single .custom-field-options{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-custom-fields .custom-field-single .custom-field-options a{color:#b8b8b8}.duty-custom-fields .custom-field-single .custom-field-options a:hover{color:#72a114}.duty-custom-fields .custom-field-data{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{display:block;line-height:.9rem}.duty-custom-fields .custom-field-options{margin:0}.duty-custom-fields .custom-field-value{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields form label{cursor:pointer}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#b8b8b8;margin-top:.5rem}.external-reference a{border-left:1px solid #b8b8b8;padding:0 .2rem;-webkit-transition:color .3s linear;transition:color .3s linear}.external-reference a:hover{color:#72a114}.external-reference a:first-child{border:0}.activity-single .comment-restore,.activity-single .date,.activity-single .deleted-comment,.activity-single.deleted-comment,.change-entry .activity-fromto,.more-activity,.more-comments,.show-more-comments{font-size:.9rem}.activity-single .deleted-comment .comment-body p,.activity-single.deleted-comment .comment-body p{font-size:1rem}.history-tabs{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.change-entry .activity-changed{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.history{margin-bottom:1rem}.changes-title{display:block;padding:.5rem}.changes-title:hover .icon{color:#72a114;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.changes-title .icon{color:#444;float:right;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:all .2s linear;transition:all .2s linear}.change-entry{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.change-entry:last-child{border-bottom:0}.change-entry .activity-changed,.change-entry .activity-fromto{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.history-tabs{border-bottom:3px solid #b8b8b8;margin-bottom:0;padding:.5rem 0}.history-tabs li{font-size:1.2rem;display:inline-block}.history-tabs li:first-child{border-right:1px solid #b8b8b8}.history-tabs a{padding:0 2rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs a.active{color:#444}.history-tabs a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs .icon{margin-right:.5rem}.add-comment:after{clear:both;content:'';display:table}.add-comment.active .button-green{display:block}.add-comment.active textarea{height:6rem;-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.add-comment.active .help-markdown{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.add-comment.active .preview-icon{opacity:1;position:absolute;right:1rem}.add-comment .help-markdown,.add-comment .preview-icon,.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave.ng-leave-active:last-child{opacity:0}.add-comment textarea{background:#fff;height:5rem;margin-bottom:.5rem;min-height:41px}.add-comment .save-comment{color:#fff;float:right}.add-comment .button-green{display:none}.more-comments,.show-more-comments{color:#b8b8b8;display:block;border-bottom:1px solid #b8b8b8}.add-comment .edit,.add-comment .preview-icon{position:absolute;right:1rem}.show-more-comments{border-top:1px solid #b8b8b8;padding:1rem 0 1rem 1rem}.show-more-comments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.more-comments{padding:1rem}.more-comments .prev-comments-num{color:#72a114;margin-left:.5rem}.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{-webkit-transition:all .3s ease-in;transition:all .3s ease-in}.comment-list.activeanimation .comment-single.ng-enter.ng-enter-active:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{opacity:1}.activity-single{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2rem 0;position:relative}.activity-single:hover .comment-delete,.activity-single:hover .comment-restore{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.activity-single:first-child{margin-top:0}.activity-single:last-child{border-bottom:0}.activity-single .deleted-comment,.activity-single.deleted-comment{color:#b8b8b8;padding:.5rem}.activity-single .deleted-comment a,.activity-single.deleted-comment a{color:#b8b8b8;margin-left:.3rem}.activity-single .deleted-comment a:hover,.activity-single.deleted-comment a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .deleted-comment img,.activity-single.deleted-comment img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:.5}.activity-single .deleted-comment .comment-body,.activity-single.deleted-comment .comment-body{display:none;margin:.2rem 0 .5rem}.activity-single .activity-username,.activity-single .username{margin-bottom:.5rem;color:#72a114}.activity-single .comment-restore{color:#b8b8b8;position:absolute;right:0;top:.4rem}.activity-single .comment-restore .icon{vertical-align:baseline}.activity-single .comment-restore:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .activity-user{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.activity-single .activity-content{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:calc(100% - 80px)}.activity-single .changes{background:#f5f5f5}.activity-single .changes .change-entry{display:none}.activity-single .changes .change-entry.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.activity-single .date{color:#b8b8b8;margin-left:1rem}.activity-single .wysiwyg{margin-bottom:0}.activity-single .comment-delete{color:red;opacity:0;position:absolute;right:0;top:2rem;-webkit-transition:all .2s linear;transition:all .2s linear}.activity-single .comment-delete:hover{color:#ff8282;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single.activity .change-entry{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.more-activity{border-bottom:1px solid #b8b8b8;color:#b8b8b8;display:block;padding:1rem}.more-activity .prev-activity-num{color:#72a114;margin-left:.5rem}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox-generic-form label{font-size:.75rem}.lightbox-add-member .help-text,.lightbox-delete-account .newsletter input+label,.lightbox-sprint-add-edit .delete-sprint,.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem}.lightbox-select-user .more-watchers{font-size:1rem}.lightbox-add-member .add-member-wrapper .icon-delete,.lightbox-add-member .icon,.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-size:1.2rem}.lightbox h2{font-size:1.6rem}.lightbox .close,.lightbox-add-member .icon-delete{font-size:2rem}.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress,.lightbox-select-user .more-watchers{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.lightbox h2,.lightbox-delete-account .newsletter input+label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.lightbox .close{color:#555;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.lightbox-add-member .add-member-wrapper fieldset,.lightbox-generic-form fieldset{position:relative}.lightbox .close:hover{color:#72a114}.open.lightbox{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.lightbox{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox-generic-loading .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.lightbox-generic-form form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form textarea{margin-bottom:1rem;max-height:9rem;min-height:7rem;resize:vertical}.lightbox-generic-form label{background:#f5f5f5;border:1px solid #b8b8b8;color:#444;cursor:pointer;display:block;padding:7px 30px;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form label:hover span{color:#fff}.lightbox-generic-form label span{color:#444;vertical-align:middle}.lightbox-generic-form .settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem}.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox-generic-form .settings fieldset:hover{color:#fff;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-add-member .button,.lightbox-add-member .extra-text{margin-top:1rem}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #72a114}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#72a114;border:1px solid #72a114;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-bulk form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-block textarea,.lightbox-create-issue textarea{min-height:8rem;max-height:12rem;margin-bottom:1rem}.lightbox-search form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-search fieldset{margin-bottom:1rem}.lightbox-add-member .add-member-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.lightbox-add-member .add-member-wrapper:last-child,.lightbox-add-member fieldset{margin-bottom:0}.lightbox-add-member .add-member-wrapper fieldset:first-child{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.lightbox-add-member .add-member-wrapper fieldset:last-child{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.lightbox-add-member select{width:80%}.lightbox-add-member .icon{margin-left:.5rem}.lightbox-add-member .icon-delete:hover{color:red}.lightbox-add-member .help-text{padding:.5rem 1rem}.lightbox-add-member .checksley-error-list{right:.5rem}.lightbox-add-member .checksley-error-list li{display:none}.lightbox-add-member .checksley-error-list li:first-child{display:block}.lightbox-sprint-add-edit form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.main-nav .active svg path,.main-nav svg path{opacity:1}.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint{color:#444;display:block;margin-top:1rem;text-align:right}.lightbox-sprint-add-edit .delete-sprint a{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-sprint-add-edit .delete-sprint a:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-generic-ask form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-account form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row,.related-tasks-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.lightbox-delete-project .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-webkit-flex-basis:500px;-ms-flex-preferred-size:500px;flex-basis:500px;-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;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{max-height:100%;max-width:100%;width:100%}.lightbox-generic-loading .progress-bar-wrapper{background:#e8e8e8;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;-webkit-transition:width .1s linear;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#e8e8e8;bottom:35px;color:#555;padding:.3rem;position:absolute;-webkit-transition:left .1s linear;transition:left .1s linear}.lightbox-create-issue form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:flex}.main-nav a,.main-nav span{display:block}.lightbox-create-issue .fieldset-row fieldset{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block .form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.lightbox-select-user .more-watchers{padding:.5rem;text-align:center}.lb-create-edit-userstory .ticket-role-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;max-width:calc(100% * (1/5) - .2rem)}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(5n+5){margin-right:0}.lb-create-edit-userstory .points-per-role{margin-bottom:1rem}.main-nav a:hover .helper{font-size:.9rem}.main-nav .item{font-size:1.2rem}tg-project-menu{background-position:0 -300px;min-height:calc(100vh - 40px);padding:1rem 0}.main-nav{list-style:none;padding:0;position:relative;text-align:center}.related-tasks-body .row,.related-tasks-body .status{text-align:left;position:relative}.main-nav a{color:#fff;padding:.75rem .8rem;position:relative}.main-nav a:hover{background:rgba(0,0,0,.2);color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.main-nav a:hover .helper{-webkit-animation:slideLeft .2s ease-in-out both;animation:slideLeft .2s ease-in-out both;background:-webkit-linear-gradient(left,#000 0,rgba(0,0,0,.8) 100%);background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;padding:.4rem 1rem;position:absolute;top:calc(50% - 1rem);-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;z-index:99}.main-nav a:hover .helper:after{background:#050505;content:'';height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:12px;z-index:98}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .active{color:#9dce0a}@-webkit-keyframes slideLeft{0%{opacity:0}100%{opacity:1}}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.related-tasks-body .pop-status,.related-tasks-body .pop-status a,.related-tasks-body .row{font-size:.9rem}.related-tasks-body .task-name input,.related-tasks-header .related-tasks-title{font-size:1rem}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine,.related-tasks-body .task-settings a,.related-tasks-header .icon{font-size:1.2rem}.related-tasks-body .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.related-tasks-header .related-tasks-title{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.related-tasks{margin-bottom:2rem;position:relative}.related-tasks-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.related-tasks-header .icon{color:#444;cursor:pointer}.related-tasks-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.related-tasks-body{width:100%}.related-tasks-body .row{-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;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.5rem 0 .5rem .5rem;width:100%}.related-tasks-body .row:hover{background:0 0}.related-tasks-body .row:hover .task-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .row:last-child{border:0}.related-tasks-body .row .tasks{overflow:hidden;width:100%}.related-tasks-body .row .status{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100px}.related-tasks-body .row .assigned-to{cursor:pointer;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .status:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover a{text-align:left;width:100%}.related-tasks-body .status .popover .point{text-align:center}.related-tasks-body .status .icon{color:#b8b8b8;margin-left:.2rem;opacity:0}.related-tasks-body .pop-status{background:#050505;color:#fff;display:none;left:40%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.related-tasks-body .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.related-tasks-body .blocked .icon,.related-tasks-body .blocked .icon:hover,.related-tasks-body .blocked a,.related-tasks-body .blocked a:hover,.related-tasks-body .blocked:hover .icon,.related-tasks-body .blocked:hover .icon:hover,.related-tasks-body .blocked:hover a,.related-tasks-body .blocked:hover a:hover,.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .task-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.related-tasks-body .task-name a{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-name input{margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .task-name.loading span{-webkit-animation:loading .5s linear,spin 1s linear infinite;animation:loading .5s linear,spin 1s linear infinite}.filters-inner .loading .loading-spinner,.ticket-detail-settings .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:#ff8282;color:#fff}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .iocaine,.related-tasks-body .iocaine:hover{background:rgba(157,206,10,.3)}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine{display:inline-block;margin-right:.5rem;vertical-align:top}.related-tasks-body .task-settings{margin:0 0 0 2rem;opacity:0;position:absolute;right:0;top:0;width:10%}.related-tasks-body .task-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .task-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .assigned-to{position:relative;text-align:left}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto.editable{cursor:pointer}.related-tasks-body .task-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{opacity:0;position:absolute;right:.5rem;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-data .ticket-data-container,.ticket-status .priority-data .pop-priority,.ticket-status .priority-data .pop-priority a,.ticket-status .severity-data .pop-severity,.ticket-status .severity-data .pop-severity a,.ticket-status .status-data .pop-status,.ticket-status .status-data .pop-status a,.ticket-status .type-data .pop-type,.ticket-status .type-data .pop-type a,.ticket-track-buttons .track-inner{font-size:.9rem}.ticket-data .ticket-title span:last-child,.ticket-track-buttons .track-button-counter{font-size:1.2rem}.ticket-data .ticket-title,.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .status-data .pop-status,.ticket-status .type-data .pop-type,.ticket-track-buttons .track-inner{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-detail-settings .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.ticket-data .ticket-title{font-size:1.6rem;margin:1.5rem 0 2rem}.ticket-data .ticket-title span{margin-right:.25rem}.ticket-data .ticket-data-container{margin-bottom:1rem}.ticket-data .ticket-data-container .icon{margin-left:.25rem}.ticket-data .level{display:inline-block;margin-right:.5rem;vertical-align:top}.filters h1,.filters h1 a{vertical-align:baseline}.ticket-data .level-name{color:#c2c2c2;float:right;text-transform:lowercase}.ticket-data .ticket-estimation .ticket-role-points{max-width:25%}.ticket-data .ticket-estimation .ticket-role-points:first-child{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.ticket-status{margin-bottom:.5rem}.ticket-status:last-child{margin:0}.ticket-status div{background:#e8e8e8;padding:.5rem 1rem .5rem .5rem;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .clickable:hover{background:#dcdcdc;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .type-data{position:relative}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .type-data .pop-type a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .severity-data{position:relative}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .severity-data .pop-severity a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .priority-data .pop-priority:after,.ticket-status .status-data .pop-status:after{background:#050505;height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);content:''}.ticket-status .priority-data{position:relative}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .priority-data .pop-priority a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{position:absolute;transform:rotate(45deg);width:0}.ticket-status .status-data{position:relative}.ticket-status .status-data .pop-status{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .status-data .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .status-data .pop-status a:last-child{border:0}.ticket-status .status-data .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .status-data .pop-status a:hover.point{color:#fff}.ticket-status .status-data .pop-status:after{position:absolute;transform:rotate(45deg);width:0}.ticket-track-buttons .track-inner{background:#e8e8e8;padding:.25rem;text-transform:uppercase;-webkit-transition:background .25s;transition:background .25s}.ticket-track-buttons .track-inner:hover{background:#dcdcdc}.ticket-track-buttons .track-button{width:100%}.ticket-track-buttons .active .track-button-counter{background:rgba(68,68,68,.5)}.ticket-track-buttons .active:hover .track-inner{background:rgba(157,206,10,.2)}.ticket-track-buttons .active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.ticket-track-buttons .active.is-hover path{fill:#ff8282}.single-project .track-container .icon path,.single-project .track-container .list-itemtype-track-likers.active path,.single-project .track-container .list-itemtype-track-watchers.active path{fill:currentcolor}.ticket-track-buttons .track-button-counter{background:rgba(68,68,68,.25);color:#f5f5f5;padding:0 .5rem}.ticket-track-buttons .vote-button{margin-bottom:.3rem}.ticket-track-buttons .watch-button{border-bottom:0}.ticket-track-buttons .ticket-watchers{margin:.5rem 0}.wizard-create-project .create-step1 fieldset:first-child,.wizard-create-project .wizard-action a:first-child{margin-right:.5rem}.ticket-track-buttons .add-watcher{display:block;margin:.5rem}.ticket-track-buttons .add-watcher .icon{background:rgba(68,68,68,.25);color:#f5f5f5;margin-right:.5rem;padding:.25rem}.ticket-track-buttons .add-watcher:hover .icon{background:#9dce0a;color:#f5f5f5;-webkit-transition:background .3s linear;transition:background .3s linear}.ticket-detail-settings{margin-top:2rem}.ticket-detail-settings .button,.ticket-detail-settings label{display:block;margin-bottom:.5rem;text-align:center}.ticket-detail-settings .button.editable,.ticket-detail-settings label.editable{cursor:pointer}.ticket-detail-settings .button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .button-gray,.ticket-detail-settings .button-gray:hover{background:#b8b8b8}.ticket-detail-settings .button-gray.editable:hover{background:#444;cursor:pointer}.ticket-detail-settings .button-gray.active{background:#72a114}.ticket-detail-settings .item-block.editable:hover{background:red;cursor:pointer}.ticket-detail-settings .button-red{display:block;margin-top:2rem}.wizard-create-project{background:url(/images/invitation_bg.jpg) center center no-repeat;bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910;background-size:cover;color:#fff;text-align:center}.wizard-create-project p{font-size:.9rem}.wizard-create-project .close{font-size:2rem;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.open.wizard-create-project{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.wizard-create-project{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.wizard-create-project fieldset{margin-bottom:1rem}.wizard-create-project .button-gray,.wizard-create-project .button-green{display:block;padding:12px;text-align:center}.wizard-create-project form{width:500px}.wizard-create-project .title{text-align:center;width:100%}.wizard-create-project h1,.wizard-create-project p{color:#fff}.wizard-create-project h1{line-height:1.5rem}.wizard-create-project p{opacity:.8}.wizard-create-project input,.wizard-create-project select,.wizard-create-project textarea{background:rgba(255,255,255,.7)}.wizard-create-project input::-webkit-input-placeholder,.wizard-create-project select::-webkit-input-placeholder,.wizard-create-project textarea::-webkit-input-placeholder{color:#444}.wizard-create-project input::-moz-placeholder,.wizard-create-project select::-moz-placeholder,.wizard-create-project textarea::-moz-placeholder{color:#444}.wizard-create-project input:-moz-placeholder,.wizard-create-project select:-moz-placeholder,.wizard-create-project textarea:-moz-placeholder{color:#444}.wizard-create-project input:-ms-input-placeholder,.wizard-create-project select:-ms-input-placeholder,.wizard-create-project textarea:-ms-input-placeholder{color:#444}.wizard-create-project .close{color:#fff}.wizard-create-project .close:hover{color:#ff8282}.wizard-create-project .wizard-step{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out;-webkit-animation-direction:alternate-reverse;animation-direction:alternate-reverse;display:none}.wizard-create-project .wizard-step.active{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out}.wizard-create-project .wizard-step.active.create-step1,.wizard-create-project .wizard-step.active.create-step2,.wizard-create-project .wizard-step.active.create-step3{display:block}.wizard-create-project .wizard-action div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .wizard-action a{color:#fff;display:inline-block;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 .template-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .create-step1 fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 input{display:none}.wizard-create-project .create-step1 input:checked+label{background:rgba(157,206,10,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label{background:rgba(245,245,245,.7);cursor:pointer;display:block;margin-bottom:1rem;padding:1rem;text-align:center;-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label:hover{background:rgba(114,161,20,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label .icon{font-size:3rem;color:#fff}.wizard-create-project .create-step1 h2{color:#fff;margin:.5rem 0 0;text-transform:uppercase}.wizard-create-project .create-step1 p{text-align:center}.wizard-create-project .progress-bar{bottom:0;height:.5rem;left:0;position:absolute;width:100%}.wizard-create-project .step1 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:25%}.wizard-create-project .step1 .progress-state span:nth-child(1){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .step2 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:75%}.wizard-create-project .step2 .progress-state span:nth-child(1),.wizard-create-project .step2 .progress-state span:nth-child(2){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .progress-state{position:absolute;width:100%}.wizard-create-project .progress-state span{color:rgba(255,255,255,.5);display:inline-block;margin-left:-100px;position:absolute;text-align:center;top:-2rem;-webkit-transition:all 1s ease-in;transition:all 1s ease-in;width:200px}.wizard-create-project .progress-state span:nth-child(1){left:25%}.wizard-create-project .progress-state span:nth-child(2){left:75%}.wizard-create-project .progress-bar-wrapper{background:rgba(255,255,255,.3);height:.5rem}.wizard-create-project .bar{background:rgba(157,206,10,.9);height:.5rem;left:0;position:absolute;top:0;width:0}.create-project{background:url(https://farm9.staticflickr.com/8449/7893171238_a201af22bc_k_d.jpg) center center no-repeat;background-size:cover;-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;bottom:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.create-project .tagline{font-size:2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#fff;line-height:2rem;text-transform:uppercase}.introjs-tooltip p,.single-project .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project fieldset{margin-bottom:1rem}.create-project .create-project-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.create-project h1{color:#fff;text-align:center}.create-project .logo,.create-project .tagline{margin-bottom:1rem;text-align:center}.create-project form{margin-bottom:2rem}.create-project input{background:#fff}.create-project input::-webkit-input-placeholder{color:#f5f5f5}.create-project input::-moz-placeholder{color:#f5f5f5}.create-project input:-moz-placeholder{color:#f5f5f5}.create-project input:-ms-input-placeholder{color:#f5f5f5}.create-project .button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.create-project .button:hover{background:#212121}.create-project a:hover{color:#fff}.filters h2 .icon-arrow-right{font-size:1rem}.filters-inner .loading .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-width:1rem}.filters h1 .icon{margin:0}.filters h2 .icon-arrow-right,.single-project h1{vertical-align:middle}.filters h2{font-size:1.2rem;margin-top:1rem}.filters input{background:#444;color:#fff}.filters input::-webkit-input-placeholder{color:#b8b8b8}.filters input::-moz-placeholder{color:#b8b8b8}.filters input:-moz-placeholder{color:#b8b8b8}.filters input:-ms-input-placeholder{color:#b8b8b8}.filters .icon-search{color:#b8b8b8;position:absolute;right:.7rem;top:.7rem}.filters-inner{opacity:0;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.filters-inner .loading{margin:0;padding:8px;text-align:center;width:100%}.filters-applied{margin-top:.5rem}.filters-step-cat .save-filters{color:#fff;display:block;text-align:center}.filters-step-cat .my-filter-name{background:#444;color:#f5f5f5;width:100%}.filters-step-cat .my-filter-name::-webkit-input-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name::-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-ms-input-placeholder{color:#b8b8b8}.filters-cats{margin-top:2rem}.filters-cats li{border-bottom:1px solid #b8b8b8;text-transform:uppercase}.filters-cats .custom-filters .title{color:#72a114}.filters-cats a{color:#444;display:block;padding:.5rem 0 .5rem .5rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.filters-cats .icon{color:#444;float:right;opacity:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-overlay{background:-webkit-radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background-color:#f5f5f5}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#72a114;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .description{font-weight:100}.single-project .title{font-weight:800}.single-project .track-container .list-itemtype-track{font-size:.9rem}.single-project .description,.single-project .title{font-size:1rem}.single-project .single-project-intro{margin-bottom:2rem}.single-project .intro-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.single-project h1{color:#000;display:inline-block;line-height:1.2;margin-bottom:0;margin-right:3rem}.single-project .private{font-size:1rem;vertical-align:super}.single-project .like-watch-container{margin-left:auto}.single-project .track-buttons-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.single-project .project-data,.single-project .title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#000}.single-project .track-container .icon svg{max-height:1rem;max-width:1rem}.single-project .project-data{display:flex}.single-project .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-shrink:3;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .involved-data{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-organization,.single-project .involved-team{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-organization li,.single-project .involved-team li{margin-right:.14rem;width:24%}.single-project .involved-organization li:nth-child(4n),.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-organization a,.single-project .involved-team a{display:block}.single-project .involved-organization img,.single-project .involved-team img{border-radius:.2rem;width:100%}.issues-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table .pop-status,.issues-table .pop-status a,.issues-table .table-main{font-size:.9rem}.issues-table .title{font-size:1rem}.empty-issues .title{font-size:1.2rem;text-transform:uppercase}.empty-issues p,.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.issues-table .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8}.issues-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .avatar,.kanban-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .title:hover{background:0 0}.issues-table .title div{cursor:pointer}.issues-table .title .votes{color:#555}.issues-table .table-main{border-bottom:1px solid #ebebeb}.issues-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-webkit-flex-basis:60%;-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-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-align:center;width:75px}.issues-table .votes{color:#555;-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes.inactive{color:#b8b8b8}.issues-table .votes.is-voted{color:#9dce0a}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .created-field,.issues-table .issue-field{-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{opacity:0;position:absolute;right:0;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .pop-status{background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99}.issues-table .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1200px){.issues-table .created-field,.issues-table .level-field{display:none}}@media (max-width:767px){.issues-table .assigned-field,.issues-table .created-field,.issues-table .level-field{display:none}}.empty-issues{margin-top:4rem;text-align:center}.empty-issues img{margin-bottom:1rem}.empty-issues p,.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table-body .task-column .kanban-column-intro{font-size:.9rem}.kanban-table-body,.kanban-table-header .task-colum-name .icon{font-size:1rem}.kanban-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table .vfold.task-colum-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold .kanban-task,.kanban-table .vfold.task-colum-name .icon-bulk,.kanban-table .vfold.task-colum-name .icon-closed-eye,.kanban-table .vfold.task-colum-name .icon-open-eye,.kanban-table .vfold.task-colum-name .icon-plus,.kanban-table .vfold.task-colum-name .icon-vfold,.kanban-table .vfold.task-colum-name .icon-vunfold,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.task-column{-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.kanban-table-header .kanban-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.kanban-table-body,.kanban-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-header .task-colum-name{font-size:1.2rem;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem .5rem .5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.kanban-table-header .task-colum-name .icon.hfold,.kanban-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-table-header .icon-closed-eye,.kanban-table-header .icon-open-eye{display:inline-block}.kanban-table-header .icon-closed-eye svg,.kanban-table-header .icon-open-eye svg{fill:#b8b8b8;height:1.1rem;margin-top:.25rem;width:1.1rem}.kanban-table-header .icon-closed-eye:hover svg,.kanban-table-header .icon-open-eye:hover svg{fill:#72a114}.kanban-table-header .icon-open-eye .svg-eye-closed{display:none}.kanban-table-header .icon-closed-eye .svg-eye-closed,.kanban-table-header .icon-open-eye .svg-eye-open{display:block}.kanban-table-header .icon-closed-eye .svg-eye-open{display:none}.kanban-table-body{display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-inner,.search-filter ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;margin:0 10px 0 0;max-width:300px;overflow-y:auto;widows:300px}.kanban-table-body .task-column:last-child{margin-right:0}.kanban-table-body .task-column .kanban-column-intro{font-family:opensans-semibold,Arial,Helvetica,sans-serif;color:#b8b8b8;margin:1rem 2rem}.kanban-table-body .task-column .kanban-column-intro.active{color:#050505}.kanban-table-body .task-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-inner{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.search-filter a{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;opacity:.2}.search-filter ul{border-bottom:3px solid #b8b8b8;display:flex;padding-bottom:.5rem}.search-filter li{margin-right:1rem}.search-filter .active,.search-filter a:hover{color:#555;opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.search-filter .icon{margin-right:.4rem}.search-filter .name{padding-left:5px}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#b8b8b8}.search-in input::-moz-placeholder{color:#b8b8b8}.search-in input:-moz-placeholder{color:#b8b8b8}.search-in input:-ms-input-placeholder{color:#b8b8b8}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{color:#b8b8b8}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #f5f5f5}.search-result-table .user-story-name .icon{font-size:1rem;color:#b8b8b8}.empty-search-results .title{font-size:1.2rem;text-transform:uppercase}.search-result-table .row{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .row .ref{-webkit-flex-basis:30px;-ms-flex-preferred-size:30px;flex-basis:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 1rem}.search-result-table .row .user-stories{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.search-result-table .row .points,.search-result-table .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem}.search-result-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.search-result-table .points,.search-result-table .status{position:relative}.search-result-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.empty-search-results{margin-top:4rem;text-align:center}.empty-search-results img{margin-bottom:1rem}.empty-search-results p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.team-filters nav li{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.table-team .team-header,.team-filters nav li:last-child{border-bottom:0}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters nav a{display:block;padding:1rem 0 1rem 1rem}.team-filters nav a.active,.team-filters nav a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.team-filters nav .active,.team-filters nav a.active.icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.team-filters nav .icon{color:#050505;float:right;opacity:0}.table-team .leave-project,.table-team .popover,.table-team .popover a{font-size:.9rem}.table-team .attribute .points{font-size:1.6rem}.table-team .attribute,.table-team .attribute .points,.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.policy-table .policy-table-header,.table-team .avatar .name,.table-team .team-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.table-team .row{padding:.5rem}.table-team .username{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:6;-webkit-flex:6;-ms-flex:6;flex:6;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{color:#050505;font-size:1.8rem}.table-team .attribute .points{color:#444}.table-team .attribute .top{color:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{color:#b8b8b8;display:block}.table-team .leave-project .icon{margin-right:.2rem}.table-team .leave-project:hover .icon{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .hero{width:100%}.table-team .hero .row{background:#f5f5f5;border-bottom:0;margin:1rem 0}.table-team .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.table-team .avatar img{-webkit-flex-basis:66px;-ms-flex-preferred-size:66px;flex-basis:66px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:66px}.table-team .avatar figcaption{margin-left:1rem;width:65%}.table-team .avatar figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .popover{background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99}.table-team .popover a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.policy-table .policy-table-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{border-bottom:2px solid #b8b8b8}.user-change-password label,.user-profile label{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#72a114;-webkit-transition:background .3s linear;transition:background .3s linear}.policy-table label{background:#b8b8b8;border-radius:5px;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile form .avatar-container p{font-size:.75rem}.user-profile .delete-account,.user-profile form .avatar-container .use-gravatar{font-size:.9rem}.user-profile form .avatar-container span{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.user-profile form .avatar-container .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem}.user-profile form{max-width:700px;width:100%}.user-profile form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.user-profile form .avatar-container{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:1rem}.user-profile form .avatar-container .image-container{position:relative}.user-profile form .avatar-container .avatar{border-radius:8%;width:100%}.user-profile form .avatar-container .overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile form .avatar-container .loading-spinner{border:0;min-height:3rem;min-width:3rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.user-profile form .avatar-container p{line-height:.8rem;margin-bottom:.3rem;text-align:center}.user-profile form .avatar-container .use-gravatar{cursor:pointer;display:inline-block;text-align:center;width:100%}.user-profile form .data{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.user-profile fieldset{margin-bottom:1rem}.user-profile .submit{margin-top:2rem}.user-profile label{display:block;margin-bottom:.5rem}.user-profile textarea{min-height:7rem}.user-profile .button-green{color:#fff;cursor:pointer;display:block;padding:12px;text-align:center}.user-profile .delete-account{display:block;margin-top:1rem}.wiki-nav li input{font-size:1rem}.wiki-nav li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.wiki-nav li:hover .icon{opacity:1;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li a{display:block;padding:1rem 0 1rem 1rem}.wiki-nav li a span{cursor:pointer}.wiki-nav li .icon{color:#050505;float:right;opacity:0;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background:#444;color:#f5f5f5}.wiki-nav li input::-webkit-input-placeholder{color:#b8b8b8}.wiki-nav li input::-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-ms-input-placeholder{color:#b8b8b8}.wiki-nav li .loading{margin:0;padding:8px;text-align:center;width:100%}.wiki-nav .add-button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.wiki-summary .wiki-user-modification,.wiki-summary div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.wiki-summary .username{font-size:1.2rem;color:#9dce0a;white-space:nowrap}.wiki-summary{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary div{display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:1rem}.wiki-summary .number{line-height:2rem;top:0}.wiki-summary .wiki-user-modification{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary figure{margin-right:.3rem;width:32px}.external-app-wrapper .app-card a,.external-app-wrapper .app-card p,.external-app-wrapper .user-card a{font-size:.75rem}.external-app-wrapper .cancel{font-size:.9rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:6rem;margin:0 auto;width:6rem}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.external-app-wrapper .app-card a,.external-app-wrapper .button-green,.external-app-wrapper .user-card a{display:block}.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card .app-image{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.external-app-wrapper .user-card{background:#F0EFD1;border:1px solid #000;padding:1rem}.external-app-wrapper .user-card .user-image{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .cancel{display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #f5f5f5;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;-webkit-transition-delay:.2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single.blocked,.working-on .duty-single.blocked{background:rgba(255,130,130,.2);color:red}.watching .duty-single>a,.working-on .duty-single>a{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:0;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}.empty-ticket .data,.home-project-list li a{-webkit-box-orient:vertical;-webkit-box-direction:normal}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper,.home-wrapper .title-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-wrapper{display:flex}.home-wrapper .duty-summary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .project-list{width:250px}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;margin:0 0 .5rem;padding:.9rem 1rem}.empty-ticket,.home-project-list li a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-project-list p{font-size:.75rem}.projects-empty p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.home-project-list h2,.home-project-list p{font-family:opensans-regular,Arial,Helvetica,sans-serif}.home-project-list li{border-radius:3px;cursor:pointer;margin-bottom:.75rem;padding:1rem;text-overflow:ellipsis}.home-project-list li:hover{border-color:#9dce0a;-webkit-transition:all .3s linear;transition:all .3s linear}.home-project-list li:hover p{color:#555;-webkit-transition:color .3s linear;transition:color .3s linear}.home-project-list li:hover .private path{fill:#555;-webkit-transition:fill .3s linear;transition:fill .3s linear}.home-project-list li a{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:5rem}.home-project-list h2{color:#555;font-size:1.5rem;line-height:1.3;margin-bottom:.5rem;text-transform:none}.home-project-list h2 .project-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.home-project-list p{line-height:125%;margin:0}.projects-empty{text-align:center}.projects-empty svg{height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty svg path{fill:#f5f5f5}.navbar .nav-left>a path,.navbar a:hover svg path{fill:#fff}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:2rem 9rem 1rem;text-align:center}.empty-ticket{display:flex}.empty-ticket .data,.navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.empty-ticket:not(:last-child){border-bottom:1px solid #f5f5f5;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e8e8e8;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:40vw}.empty-ticket .line:last-child{margin:0;width:20vw}.navbar{display:flex;height:40px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar:after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar .nav-left>a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left>a.logo{background:rgba(0,0,0,.2);padding:.4rem .75rem}.navbar .nav-left>a svg{height:1.6rem;max-width:2rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right a{color:#fff;padding:.5rem 2rem}.navbar a{color:#fff;display:inline-block;-webkit-transition:all .2s linear;transition:all .2s linear}.navbar a:hover{background:rgba(0,0,0,.2);color:#212121}.navbar a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar a.user-avatar span{padding-right:1rem}.navbar img{height:2.5rem;padding-left:.5rem;vertical-align:middle}.navbar svg{height:1.2rem;max-width:1.2rem}.navbar svg path{fill:#fff;-webkit-transition:all .2s;transition:all .2s}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(33,33,33,0);border-bottom-color:#212121}.navbar-dropdown ul:after{border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown a{color:#f5f5f5;display:block;padding:.8rem .5rem}.navbar-dropdown .create-options,.profile-filter{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#212121}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.navbar-dropdown a.import-project-button{padding-left:.75rem;padding-right:.75rem}.navbar-dropdown .create-options{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.profile-favs{border-top:1px solid #f5f5f5}.profile-filter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile,.profile-filter .searchbox{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.profile-filter .searchbox{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{color:grayer;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs,.profile-projects,.profile-timeline{border-top:1px solid #f5f5f5}.profile-filter .searchbox input:focus{border-bottom:1px solid #b8b8b8;outline:0;-webkit-transition:border-bottom .3s ease-in;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#b8b8b8;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile .timeline-wrapper .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-height:3rem;max-width:3rem}.profile{display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{background:#fff;margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;-webkit-transition:all .3s cubic-bezier(.09,.43,.35,.95);transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .profile-sidebar{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{margin:2rem auto;max-width:160px;text-align:center}.profile .empty-tab p{font-size:.9rem}.profile-bar .profile-stats .stat-name{font-size:.9rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username{font-size:1.2rem}.profile-bar h2{font-size:1.6rem}.profile-bar .profile-stats .stat-number,.profile-bar h1{font-size:2rem}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .profile-organizations h3,.profile-bar .profile-stats .stat-number,.profile-bar h1{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{-webkit-filter:brightness(40%) saturate(150%) hue-rotate(60deg);filter:brightness(40%) saturate(150%) hue-rotate(60deg);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1);-webkit-transition-delay:.3s;transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.01,.7,1,1);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#b8b8b8;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar h1{line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar h2{color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#b8b8b8;margin-bottom:1rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#b8b8b8}.main-nav svg path,.navbar a svg path{fill:#fff}.profile-bar .profile-stats{border-bottom:1px solid #f5f5f5;color:#555;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{display:block;line-height:1}.profile-bar .profile-stats .stat-name{display:block}.profile-bar .profile-organizations{border-bottom:1px solid #f5f5f5;border-top:1px solid #f5f5f5;margin-bottom:1rem;padding:1rem 0}.profile-bar .profile-organizations h3{margin-bottom:.5rem}.profile-bar .profile-organizations .profile-organizations-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.profile-bar .profile-organizations .organization{background:#b8b8b8;border-radius:5px;height:45px;margin-right:.2rem;width:45px}.profile-bar .profile-quote{background:url(/images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contact-single .profile-contact-data h1 span{font-size:.9rem}.profile-contact-single .profile-contact-data .extra-info{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-contact-single .profile-contact-data h1,.profile-contact-single .profile-contact-data h1 span{font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-contacts{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}.profile-contact-filters{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.profile-contact-filters a{border-bottom:2px solid #fff;color:#b8b8b8;display:inline-block;padding:1rem 1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-contact-filters a.active,.profile-contact-filters a:hover{border-bottom:2px solid #b8b8b8;color:#72a114}.profile-contact-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.8rem 1rem}.profile-contact-single .profile-contact-picture{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:1rem;max-width:54px}.profile-contact-single .profile-contact-picture img{border-radius:.2rem;width:100%}.profile-contact-single .profile-contact-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-contact-single .profile-contact-data h1{font-size:1.2rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:1.6;margin-bottom:0;text-transform:none}.profile-contact-single .profile-contact-data h1 span{background:#f5f5f5;color:#555;margin-left:1rem;padding:.1rem .3rem}.profile-contact-single .profile-contact-data p{color:#555;margin-bottom:0}.profile-contact-single .profile-contact-data .extra-info{color:#555}.profile-contact-single .profile-contact-data .position{margin-right:.3rem}.profile-contact-single .profile-project-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-left:auto;width:100px}.profile-contact-single .profile-project-stats div{color:#b8b8b8;margin-right:.5rem}.profile-contact-single .profile-project-stats div .icon{margin-right:.2rem;vertical-align:center}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{display:inline-block;padding:1rem 1.25rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #f5f5f5;border-right:1px solid #f5f5f5;position:relative;top:1px;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .icon{margin-right:.4rem}.profile-sidebar p{font-size:.9rem}.profile-sidebar h4{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.profile-sidebar h4 .icon{color:#b8b8b8;margin-right:.3rem;vertical-align:text-bottom}.profile-sidebar a{color:#72a114}.profile-sidebar .trans-button{margin-bottom:1rem}.profile-projects .list-itemtype-project{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:10rem}.profile-projects .list-itemtype-project .list-itemtype-project-right{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-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:200px}.project-list-wrapper .help-area{font-size:.9rem;color:#b8b8b8;width:200px}.project-list-wrapper .drag{font-size:1.2rem}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.project-list-wrapper .create-options a.create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .create-options a.import-project-button{padding:.53rem .8rem}.project-list-wrapper .create-options a.import-project-button:hover{background:#444}.project-list-wrapper .create-options a.import-project-button .icon-upload{margin:0}.project-list-wrapper .project-list-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .placeholder{background-color:#fdfdfd;height:5rem}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:#fcfef8;cursor:move;-webkit-transition:background .3s;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .drag{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:#b8b8b8;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.profile-timeline .single-attachment span{font-size:1rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child,.profile-timeline .activity-member-view a{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-timeline .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.profile-timeline .activity-item{border-bottom:1px solid #f5f5f5;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#72a114}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#b8b8b8;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-webkit-flex-basis:2rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-member-view{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-timeline .activity-member-view p{color:#b8b8b8}a:hover,h1 .date,h2 .date,h3 .date,h4 .date,h5 .date,h6 .date{color:#000}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.profile-timeline .single-attachment .icon{margin-right:.3rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{max-height:3rem;max-width:3rem}:root .taskboard-table-body .task-row,_:-ms-fullscreen .task-row{min-height:auto}.checksley-error-list{font-weight:100;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}body{background:#fff}.extrabar,.master,.menu-secondary,.menu-tertiary{background:#fff;border-left:1px solid #000;border-right:1px solid #000}.master,.menu-secondary{background:#fff}.menu-tertiary{background-color:#fff}.extrabar{background:#fff}h1,h2,h3,h4,h5,h6{font-family:Arial,Helvetica,sans-serif}a{color:#212121}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{background:#fff;border-color:#000;color:#000}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#000}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#000}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#000}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#000}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #ff2400}.checksley-error-list{background:rgba(255,36,0,.7);color:#fff}blockquote{border-left:5px solid #757575}blockquote,blockquote p,cite{color:#000}.navbar a :hover,.summary{color:#fff}.button-gray{background:#000}.tag{background:#fff;border:1px solid #000}.summary{background:#212121}.navbar{background:#000}.navbar:after{background:url(../images/menu-vert.png) top left}.activity-item p,.duty-custom-fields .custom-field-data .custom-field-description,.kanban-table-header .task-colum-name .icon,.points-per-role>li,.private path,.table-team .avatar .position,.taskboard-table-header .task-colum-name .icon,.us-created-by .created-by .created-date,.us-created-by .created-by .created-title,.watching .duty-id,.working-on .duty-id{color:#000}tg-project-menu{background-color:#000;background-image:none}.main-nav .active{background:#fff}.main-nav .active svg path{fill:#000}.taskboard-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.taskboard-table-body .taskboard-tasks-box{background:#fff;border:1px solid #000}.kanban-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.kanban-table-body .kanban-uses-box{background:#f5f5f5}.points-per-role>li:first-child{background:#000}.us-detail-settings .button-gray{background:0 0;border:1px solid #000;color:#000}.us-detail-settings .button-gray.active,.us-detail-settings .button-gray:hover{color:#fff}.history-tabs a,.more-attachments span,.us-detail-settings .button-gray span{color:#000}.login-main,.login-main a{color:#fff}.home-project-list li{border:1px solid #000}.home-project-list p{color:#000}.profile-content-tabs .tab,.profile-sidebar p{color:#212121}.settings-nav .active{background:#000;color:#fff}.admin-submenu ul a{color:#000}.policy-table input:checked+label{color:#fff}.policy-table label{color:#000}.policy-table label:hover{color:#fff}.admin-common .admin-subtitle,.admin-membership-table .avatar .email,.admin-membership-table .delete{color:#000}.admin-functionalities .functionality.active{background:#fff;border:1px solid #000} \ No newline at end of file diff --git a/dist/styles/theme-material-design.css b/dist/styles/theme-material-design.css index 15d8639..75730c1 100644 --- a/dist/styles/theme-material-design.css +++ b/dist/styles/theme-material-design.css @@ -1,4 +1,4 @@ @charset "UTF-8";.introjs-arrow,blockquote:after,blockquote:before,q:after,q:before{content:''}.pika-table,table{border-collapse:collapse;border-spacing:0}.kanban-task-minimized .task-name,.ticket-estimation .ticket-role-points .role,h1 .date,h1 span{text-overflow:ellipsis;white-space:nowrap}.lightbox textarea,.wizard-create-project textarea,textarea{resize:vertical}.change-entry .activity-fromto,.home-project-list p,.kanban-task-maximized .task-name,.profile-bar .not-full-name,.profile-bar h1{word-wrap:break-word}.codehilite .hll{background-color:#49483e}.codehilite .c{color:#75715e}.codehilite .err{color:#960050;background-color:#1e0010}.codehilite .k{color:#66d9ef}.codehilite .l{color:#ae81ff}.codehilite .n{color:#f8f8f2}.codehilite .o{color:#f92672}.codehilite .p{color:#f8f8f2}.codehilite .c1,.codehilite .cm,.codehilite .cp,.codehilite .cs{color:#75715e}.codehilite .ge{font-style:italic}.codehilite .gs{font-weight:700}.codehilite .kc,.codehilite .kd{color:#66d9ef}.codehilite .kn{color:#f92672}.codehilite .kp,.codehilite .kr,.codehilite .kt{color:#66d9ef}.codehilite .ld{color:#e6db74}.codehilite .m{color:#ae81ff}.codehilite .s{color:#e6db74}.codehilite .na{color:#a6e22e}.codehilite .nb{color:#f8f8f2}.codehilite .nc{color:#a6e22e}.codehilite .no{color:#66d9ef}.codehilite .nd{color:#a6e22e}.codehilite .ni{color:#f8f8f2}.codehilite .ne,.codehilite .nf{color:#a6e22e}.codehilite .nl,.codehilite .nn{color:#f8f8f2}.codehilite .nx{color:#a6e22e}.codehilite .py{color:#f8f8f2}.codehilite .nt{color:#f92672}.codehilite .nv{color:#f8f8f2}.codehilite .ow{color:#f92672}.codehilite .w{color:#f8f8f2}.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo{color:#ae81ff}.codehilite .s2,.codehilite .sb,.codehilite .sc,.codehilite .sd{color:#e6db74}.codehilite .se{color:#ae81ff}.codehilite .s1,.codehilite .sh,.codehilite .si,.codehilite .sr,.codehilite .ss,.codehilite .sx{color:#e6db74}.codehilite .bp,.codehilite .vc,.codehilite .vg,.codehilite .vi{color:#f8f8f2}.codehilite .il{color:#ae81ff}.codehilite .gu{color:#75715e}.codehilite .gd{color:#f92672}.codehilite .gi{color:#a6e22e}.mCustomScrollbar{-ms-touch-action:none;touch-action:none}.mCustomScrollbar.mCS_no_scrollbar{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0;opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4);height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}.markItUp .markItUpButton1 a{background-image:url(../images/markitup/h1.png)}.markItUp .markItUpButton2 a{background-image:url(../images/markitup/h2.png)}.markItUp .markItUpButton3 a{background-image:url(../images/markitup/h3.png)}.markItUp .markItUpButton4 a{background-image:url(../images/markitup/bold.png)}.markItUp .markItUpButton5 a{background-image:url(../images/markitup/italic.png)}.markItUp .markItUpButton6 a{background-image:url(../images/markitup/stroke.png)}.markdown .markItUpButton7 a{background-image:url(../images/markitup/list-bullet.png)}.markdown .markItUpButton8 a{background-image:url(../images/markitup/list-numeric.png)}.markdown .markItUpButton9 a{background-image:url(../images/markitup/picture.png)}.markdown .markItUpButton10 a{background-image:url(../images/markitup/link.png)}.markdown .markItUpButton11 a{background-image:url(../images/markitup/quotes.png)}.markdown .markItUpButton12 a{background-image:url(../images/markitup/code.png)}.markdown .preview-icon a{background-image:url(../images/markitup/preview.png)}.markdown .help a{background-image:url(../images/markitup/help.png)}.markItUp *{margin:0;padding:0;outline:0}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif}.markItUpEditor{font:12px 'Courier New',Courier,monospace;padding:5px;height:320px;clear:both;line-height:18px;overflow:auto}.markItUpPreviewFrame{overflow:auto;background-color:#FFF;width:99.9%;height:300px;margin:5px 0}.markItUpFooter{width:100%}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin-left:auto;margin-right:auto;background-image:url(../images/markitup/handle.png);cursor:n-resize}.markItUp .markItUpHeader ul{margin:0}.markItUpHeader ul li{list-style:none;position:relative;margin:3px}.markItUpHeader ul li:hover>ul{display:block}.markItUpHeader ul .markItUpDropMenu{background:url(../images/markitup/menu.png) 115% 50% no-repeat;margin-right:5px}.markItUpHeader ul .markItUpDropMenu li{margin-right:0}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0;background:#FFF;border:1px solid #000}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000}.markItUpHeader ul ul .markItUpDropMenu{background:url(../images/markitup/submenu.png) 100% 50% no-repeat #FFF}.markItUpHeader ul .markItUpSeparator{margin:2px 10px 0;width:1px;height:16px;overflow:hidden;background-color:#CCC}.introjs-button,button{overflow:visible}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px}.markItUpHeader ul ul ul li{float:none}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0}.markItUpHeader ul ul a{display:block;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! * Pikaday * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */.pika-single{display:block;position:relative;width:240px;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.introjs-bullets ul,.introjs-button,.pika-select{display:inline-block}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;position:absolute!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid #fff;position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-color:transparent transparent #fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow.left,.introjs-arrow.right{top:10px}.introjs-arrow.right,.introjs-arrow.right-bottom{right:-10px;border-color:transparent transparent transparent #fff}.introjs-arrow.right-bottom{bottom:10px}.introjs-arrow.bottom{bottom:-10px;border-color:#fff transparent transparent}.introjs-arrow.left,.introjs-arrow.left-bottom{left:-10px;border-color:transparent #fff transparent transparent}.introjs-arrow.left-bottom{bottom:10px}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{position:relative;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-progress,.loader-active,.taskboard,.taskboard-inner,body.loading-project,h1 .date,h1 span{overflow:hidden}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.admin-membership header a,.header-with-actions .button,.kanban .kanban-settings,.save-wiki{float:right}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.master,fieldset{position:relative}body,html{width:100%;min-height:100%}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}body{font-family:opensans-regular,Arial,Helvetica,sans-serif;line-height:1.3}.icon{font-family:taiga}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body .master.ng-animate{-webkit-transition:0;transition:0}.drag-active{overflow-x:hidden}.master{height:100%;min-height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu-secondary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary.filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:0}.menu-secondary.filters-bar.active{padding:2em 1em;-webkit-transition:all .2s linear;transition:all .2s linear;width:260px}.menu-secondary.filters-bar.active .filters-inner{opacity:1;-webkit-transition:all .4s ease-in;transition:all .4s ease-in}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-webkit-box-flex:4;-webkit-flex:4;-ms-flex:4;flex:4;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions .action-buttons{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;margin-left:10px}fieldset,p img{margin:0}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}h2{font-size:2rem}h1,h1 span{font-size:3rem}h1,h2{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}.wysiwyg dl dt,strong{font-weight:700}h1{margin-bottom:1rem;text-transform:uppercase}h1 span{margin-right:.5rem;vertical-align:bottom}h1 span.green,h1 span:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#3f51b5}h1 .date{max-width:500px;color:#bdbdbd}h2{line-height:1.2;margin-bottom:1rem}p{line-height:1.5}em{font-style:italic}[class*=' icon-']:before,[class^=icon-]:before,[data-icon]:before{font-family:taiga!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;speak:none;text-transform:none!important}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{-webkit-transition:color .3s linear;transition:color .3s linear}[data-icon]:before{content:attr(data-icon)}.admin-contrib .help .alt-image,.admin-third-parties .help .alt-image,.wysiwyg dl dt{font-style:italic}.icon-bug:before{content:'a'}.icon-copy:before{content:'b'}.icon-minimize:before{content:'c'}.icon-maximize:before{content:'d'}.icon-comment:before{content:'e'}.icon-plus:before{content:'f'}.icon-attachments:before{content:'g'}.icon-edit:before{content:'h'}.icon-documents:before{content:'i'}.icon-delete:before{content:'j'}.icon-arrow-bottom:before{content:'k'}.icon-arrow-left:before{content:'l'}.icon-arrow-right:before{content:'m'}.icon-arrow-up:before{content:'n'}.icon-briefcase:before{content:'o'}.icon-caret-down:before{content:'p'}.icon-caret-up:before{content:'q'}.icon-check-square:before{content:'r'}.icon-notification-error:before{content:'s'}.icon-settings:before{content:'t'}.icon-document:before{content:'u'}.icon-warning:before{content:'v'}.icon-move:before{content:'w'}.icon-drag-v:before{content:'x'}.icon-filter:before{content:'y'}.icon-help:before{content:'z'}.icon-reload:before{content:'A'}.icon-writer:before{content:'B'}.icon-stats:before{content:'C'}.icon-floppy:before{content:'D'}.icon-warning-alt:before{content:'E'}.icon-video:before{content:'F'}.icon-bulk:before{content:'G'}.icon-vunfold:before{content:'H'}.icon-tasks:before{content:'I'}.icon-kanban:before{content:'J'}.icon-search:before{content:'K'}.icon-wiki:before{content:'L'}.icon-team:before{content:'M'}.icon-vfold:before{content:'N'}.icon-issues:before{content:'O'}.icon-iocaine:before{content:'P'}.icon-archive:before{content:'Q'}.icon-capslock:before{content:'R'}.icon-upload:before{content:'S'}.icon-github:before{content:'T'}.icon-timeline:before{content:'U'}.icon-scrum:before{content:'V'}.icon-project:before{content:'W'}.icon-heart:before{content:'X'}.icon-eye:before{content:'Y'}@-webkit-keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@-webkit-keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;flex:10}}@keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;-ms-flex:10;flex:10}}@-webkit-keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes blink{85%{opacity:1}100%{opacity:.6}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote cite,sup{font-size:.9rem}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{display:block}blockquote cite:before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}sup{vertical-align:super}.blocked-warning .icon,.icon,.us-story-main-data .us-title.blocked{vertical-align:middle}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}.pika-single{z-index:999999}.pika-single .pika-title{color:#424242}.pika-single .is-selected .pika-button{background:#3f51b5;border-radius:0!important;box-shadow:inset 0 1px 3px #3f51b5}.pika-single .is-today .pika-button{color:#3f51b5}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#8c9eff!important;border-radius:0!important;box-shadow:inset 0 1px 3px #8c9eff!important}fieldset{border:0;padding:0;width:100%}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{-webkit-transition:border .3s linear;transition:border .3s linear}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.icon-capslock{bottom:.6rem;color:#757575;display:none;position:absolute;right:1rem}.auth,.error-main{bottom:0;z-index:999;left:0}.admin-membership header:after{clear:both;content:'';display:table}.admin-membership .check input{height:40px;width:85px}.admin-roles p{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#bdbdbd}.auth .logo,.auth .tagline{color:#fff;text-align:center}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.kanban,.taskboard{height:calc(100vh - 40px)}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);position:absolute;width:100%}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.project-values-title{-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;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem;text-transform:uppercase}.project-values-title h2{margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(https://lh4.googleusercontent.com/-k7YewfrSQ_Q/VGdNZND0NBI/AAAAAAAAD1A/UDZBeSGR7iM/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B480) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.invitation-main .avatar,.invitation-main .invitation-container,.kanban{-webkit-box-orient:vertical;-webkit-box-direction:normal}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth .logo{font-size:3rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.auth .auth-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{padding:0 33%;text-align:center;width:100%}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{text-align:center}.auth .login-text a:hover,.auth .register-text a:hover{color:#8c9eff}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moustache;animation-name:moustache;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;fill:rgba(63,81,181,.9);stroke:#8c9eff;stroke-width:1px;-webkit-transform-origin:50% 20%;-ms-transform-origin:50% 20%;transform-origin:50% 20%;-webkit-transition:.3s;transition:.3s}.moustache:hover{fill:rgba(140,158,255,.9);-webkit-transition:.3s;transition:.3s}.list-itemtype-project .icon path,.list-itemtype-project .list-itemtype-track-likers.active path,.list-itemtype-project .list-itemtype-track-watchers.active path,.list-itemtype-ticket .icon path,.list-itemtype-ticket .list-itemtype-track-likers.active path,.list-itemtype-ticket .list-itemtype-track-watchers.active path,.list-itemtype-timeline .icon path,.list-itemtype-timeline .list-itemtype-track-likers.active path,.list-itemtype-timeline .list-itemtype-track-watchers.active path,.list-itemtype-user .icon path,.list-itemtype-user .list-itemtype-track-likers.active path,.list-itemtype-user .list-itemtype-track-watchers.active path{fill:currentcolor}@-webkit-keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}.backlog-menu{background:#f5f5f5;color:#212121;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .trans-button{color:#212121;display:inline-block;padding:.4rem 1.5rem}.backlog-menu .trans-button.active,.backlog-menu .trans-button:hover{background:#757575;color:#f5f5f5}.backlog-menu .trans-button.active:hover{background:#c2c2c2}.backlog-menu .trans-button.move-to-current-sprint{display:none}.invitation-main,.invitation-main .invitation-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-menu .button-bulk{margin-left:.2rem}.invitation-main{background:url(https://lh6.googleusercontent.com/-2l_mJ5g6j4k/VGdNZCpaERI/AAAAAAAAD2o/zCx5Z3cYv6Y/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B497) center center no-repeat;-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;background-size:cover;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;z-index:999}.invitation-main .invitation-form .forgot-pass{font-size:.9rem}.invitation-main .avatar .person-name,.invitation-main .invitation-text,.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.invitation-main .invitation-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar .person-name{color:#fff}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{color:#fff;text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{color:#bdbdbd;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#424242;-webkit-transition:color .3s linear;transition:color .3s linear}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header,.invitation-main .register-text{color:#fff}.invitation-main .login-form,.invitation-main .register-form{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .register-text a{color:#3f51b5}.invitation-main .button-auth{display:block}.error-main,.kanban{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.invitation-main .button-blackish:hover{background:#3f51b5}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.issues .filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:260px}.issues .filters-inner{opacity:1;padding:1rem}.kanban{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px)}.kanban header{min-height:70px}.kanban .burndown-container{display:none}.error-main{background:url(https://lh6.googleusercontent.com/-2l_mJ5g6j4k/VGdNZCpaERI/AAAAAAAAD2o/zCx5Z3cYv6Y/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B497) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.taskboard-inner,.us-story-main-data header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table,.taskboard-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal}.error-main .error-container{color:#fff;-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff;margin-bottom:3rem}.error-main a{color:#3f51b5}.error-main a:hover{color:#8c9eff}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.taskboard-inner{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.team h2{margin:1rem 0}.team h2 span:last-child{color:#3f51b5}.us-story-main-data .us-title .block-desc-container,.us-story-main-data .us-title .us-related-task{font-size:.9rem}.us-story-main-data .us-title,.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{font-size:1.2rem}.blocked-warning .blocked,.blocked-warning .icon,.issue-nav a,.us-story-main-data .us-title .us-name,.us-story-main-data .us-title .us-number{font-size:2rem}.blocked-warning .blocked,.us-story-main-data .us-title .us-number{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.us-story-main-data .us-title{font-family:opensans-regular,Arial,Helvetica,sans-serif}.us-story-main-data .us-title .block-description-title,.us-story-main-data .us-title.blocked .unblock{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.us-story-main-data{margin-bottom:2rem}.us-story-main-data header{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.us-story-main-data .us-title{background:#f5f5f5;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked{background:#f44336;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked .us-title-text,.us-story-main-data .us-title.blocked input{margin-bottom:.5rem}.us-story-main-data .us-title.blocked .us-name,.us-story-main-data .us-title.blocked .us-number,.us-story-main-data .us-title.blocked .us-related-task{color:#fff}.us-story-main-data .us-title.blocked a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title.blocked a:hover{color:#ff5252}.us-story-main-data .us-title.blocked .unblock{color:#fff;float:right}.us-story-main-data .us-title.blocked .unblock:hover{color:#ff5252;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title p{margin-bottom:0}.us-story-main-data .us-title .us-edit-name-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.us-story-main-data .us-title .edit-subject{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.basic-table,.us-story-main-data .us-title .us-title-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.us-story-main-data .us-title input{background:#fff;-webkit-box-flex:9;-webkit-flex-grow:9;-ms-flex-positive:9;flex-grow:9}.us-story-main-data .us-title .save-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.us-story-main-data .us-title .us-title-text{-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;display:flex;margin-bottom:0;max-width:94%}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{max-height:1.5rem;max-width:1.5rem}.us-story-main-data .us-title .us-title-text:hover .icon-edit{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.us-story-main-data .us-title .us-number{color:#bdbdbd;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;line-height:2.2rem;margin-right:.5rem}.us-story-main-data .us-title .us-name{color:#424242;display:inline-block;line-height:2.2rem;padding-right:1rem;width:100%}.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{color:#bdbdbd;margin-left:.5rem}.us-story-main-data .us-title .icon-edit{opacity:0}.us-story-main-data .us-title .us-related-task{color:#bdbdbd;margin-top:.5rem}.us-story-main-data .us-title .us-related-task a{border-left:1px solid #bdbdbd;padding:0 .2rem}.us-story-main-data .us-title .us-related-task a:hover{color:#3f51b5}.us-story-main-data .us-title .us-related-task a:first-child{border:0}.us-story-main-data .us-title .block-description-title{color:#fff;margin-right:.5rem}.us-story-main-data .us-title .block-description{color:#fff;display:inline-block;margin-right:5rem}.blocked-warning{margin-bottom:1rem}.blocked-warning .blocked{color:#f44336;line-height:2.5rem;margin-bottom:.5rem}.blocked-warning .block-description{color:#424242;margin:0}.duty-content .edit-description,.wiki-content,.wysiwyg{margin-bottom:2rem}.issue-nav{position:absolute;right:1rem;top:1rem}.duty-content{position:relative}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#424242}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#bdbdbd}.duty-content textarea{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-content .edit{color:#424242}.duty-content .view-description .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .save{top:.4rem}.duty-content .edit-description .edit{position:absolute;right:2.5rem;top:.4rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.wysiwyg textarea{background:#fff;max-height:none}.wiki .remove{font-size:.9rem;color:#bdbdbd}.wiki .remove:hover span{color:#424242;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove:hover .icon{color:#f44336;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove .icon{color:#bdbdbd;margin-right:.2rem}.wiki-content{position:relative}.wiki-content.editable:hover .wysiwyg{background:#f5f5f5;cursor:pointer}.wiki-content .view-wiki-content:hover .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .view-wiki-content .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .icon:hover{color:#424242;opacity:.3;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .preview-icon{position:absolute;right:3.5rem}.wiki-content .edit-wiki-content .action-container{position:absolute;right:1rem;top:.3rem}.wiki-content .edit-wiki-content .edit{position:absolute;right:3.5rem;top:.4rem}.wiki-content .preview{padding-top:1.8rem}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row,.card-placeholder .placeholder-avatar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table .row,.empty-burndown,.loading-bar{-webkit-box-orient:horizontal}.basic-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:flex;-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;padding:.3rem 0;text-align:left;width:100%}.basic-table .row .width-1{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:4;-webkit-flex-grow:4;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:5;-webkit-flex-grow:5;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:7;-webkit-flex-grow:7;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.beta{left:0;position:absolute;top:0;z-index:9999}.button,.button-auth,.button-blackish,.button-bulk,.button-gray,.button-green,.button-red,.trans-button,a.button-gray,a.button-green{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:0 0;border:0;color:#fff;cursor:pointer;display:inline-block;padding:.4rem 2rem;text-align:center;text-transform:uppercase;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.trans-button{font-size:1rem}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button:hover,.trans-button:hover{color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.trans-button span{-webkit-animation:loading .5s linear;animation:loading .5s linear}.button span,.button-auth span,.button-blackish span,.button-bulk span,.button-gray span,.button-green span,.button-red span,.trans-button span{color:#fff}.button .icon,.button-auth .icon,.button-blackish .icon,.button-bulk .icon,.button-gray .icon,.button-green .icon,.button-red .icon,.trans-button .icon{color:#fff;margin-right:.3rem}.trans-button .icon,.trans-button span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}.trans-button.active .icon,.trans-button.active span,.trans-button:hover .icon,.trans-button:hover span{color:#3f51b5}.trans-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#3f51b5}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#8c9eff;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#8c9eff;color:#fff}.button-blackish{background:#212121;color:#f5f5f5}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff5252}.button-red:hover{background:#f44336;color:#fff}.button-red .icon{color:#fff}.button-block{background:#fff;color:#f44336}.button-block:hover{background:#ff5252;color:#fff}.button-bulk{background:#3f51b5;padding:.35rem .5rem}.button-bulk .icon{margin-right:0}.button-bulk:hover{background:#8c9eff}.button-auth{background:#424242}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.card-placeholder{background:#f0f0f0;border:1px dashed #e1e1e1;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:flex}.card-placeholder .image{background:#e1e1e1;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.card-placeholder .line{background:#e1e1e1;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#dcdcdc;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:500px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.check input+div{background-color:#757575;height:25px;-webkit-transition:all .2s linear;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:opensans-regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#8c9eff;margin-left:50%;-webkit-transition:all .2s linear;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.single-filter,.ticket-created-by .created-by .created-title.editable{cursor:pointer}.check input:disabled+div{background-color:#bdbdbd}.ticket-created-by{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;margin-top:.5rem;position:relative}.ticket-created-by .user-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;line-height:1.5}.ticket-created-by .created-by .created-title{color:#3f51b5}.ticket-estimation .popover,.ticket-estimation .popover a,.ticket-estimation .popover.fix,.ticket-estimation .popover.fix a,.ticket-estimation .ticket-role-points .role{font-size:.9rem}.ticket-estimation .ticket-role-points .points{font-size:1.6rem}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .points-per-role{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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}.ticket-estimation .ticket-role-points{background:rgba(189,189,189,.1);border-radius:2px;color:rgba(66,66,66,.3);-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:.1rem;padding:.5rem 0 .1rem;position:relative;text-align:center;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .ticket-role-points.active{background:rgba(140,158,255,.9);color:#f5f5f5}.ticket-estimation .ticket-role-points:first-child{background:rgba(66,66,66,.25);border-radius:0;color:#f5f5f5}.ticket-estimation .ticket-role-points:last-child{border:0}.ticket-estimation .ticket-role-points .points{font-family:opensans-regular,Arial,Helvetica,sans-serif;display:block;text-align:center}.ticket-estimation .ticket-role-points .role{max-width:90%;overflow:hidden;display:inline-block;text-align:center}.ticket-estimation .popover{background:#212121;color:#fff;display:none;left:35%;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover a{border-bottom:1px solid #424242;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;content:'';height:10px;left:10px;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#8c9eff;color:#fff}.ticket-estimation .popover.fix{background:#212121;color:#fff;display:none;left:-160px;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover.fix a{border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#8c9eff;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;content:'';height:10px;left:90%;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.single-filter{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem;opacity:.5;position:relative}.single-filter:after{clear:both;content:'';display:table}.single-filter.active,.single-filter.selected,.single-filter:hover{color:#424242;opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{background:#dcdcdc;display:block;width:100%}.single-filter .number{background:#c2c2c2;position:absolute;right:0;top:0}.single-filter .icon-delete{color:#424242;position:absolute;right:.5rem;top:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.single-filter .icon-delete:hover{color:#f44336;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task .avatar a,.kanban-task .task-text,.kanban-task-maximized .task-archived p,.kanban-task-maximized .task-points,.kanban-task-minimized .task-archived{font-size:.9rem}.kanban-task-minimized .icon-drag-h{font-size:1rem}.kanban-task .icon-drag-h,.kanban-task .icon-edit{font-size:1.2rem}.kanban-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.kanban-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.kanban-task:last-child{margin-bottom:0}.kanban-task:hover .icon-drag-h,.kanban-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.kanban-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.kanban-task.ui-sortable-placeholder{background:#424242}.kanban-task.blocked{background:#f44336;border:1px solid #ea1c0d;color:#fff}.kanban-task.blocked a,.kanban-task.blocked span{color:#fff}.kanban-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.kanban-task .kanban-tagline{border-color:#f1e8cd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:.6rem}.kanban-task .kanban-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.kanban-task .kanban-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.kanban-task .avatar-wrapper{-webkit-flex-basis:55px;-ms-flex-preferred-size:55px;flex-basis:55px;-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;width:55px}.kanban-task .avatar-wrapper img{width:100%}.kanban-task .avatar a{text-align:center}.kanban-task .avatar img{margin:0 auto}.kanban-task .avatar img:hover{border:2px solid #3f51b5;-webkit-transition:border .3s linear;transition:border .3s linear}.kanban-task .task-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 .5rem 0 .8rem}.kanban-task .task-assigned{color:#cfc29b;display:block}.kanban-task .task-num{color:#424242;margin-right:.3rem}.kanban-task .loading{bottom:.5rem;position:absolute}.kanban-task .icon-drag-h,.kanban-task .icon-edit{color:#f1e8cd;opacity:0;position:absolute;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.kanban-task .icon-drag-h:hover,.kanban-task .icon-edit:hover{color:#e0cd91;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task-maximized .task-archived{background:#e8e8e8;padding:.5rem;text-align:left;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived:hover{background:#e1e1e1;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-maximized .task-archived span{color:#bdbdbd}.kanban-task-maximized .task-archived p{color:#bdbdbd;margin:0}.kanban-task-maximized .task-archived p:last-child{color:#757575;margin:.5rem 0;text-align:center}.kanban-task-maximized .icon-edit,.kanban-task-maximized .loading{bottom:.2rem;right:.5rem}.kanban-task-maximized .icon-drag-h{font-size:2rem;bottom:.2rem;cursor:move;right:45%}.kanban-task-maximized .task-points{color:#e0cd91;margin:0}.kanban-task-maximized .task-points span{display:inline-block}.kanban-task-maximized .task-points span:first-child{padding-right:.2rem}.kanban-task-maximized .task-points .points-text{text-transform:lowercase}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{line-height:1.4;text-transform:none}.kanban-task-maximized .kanban-tag{border-top:.3rem solid}.kanban-task-minimized .kanban-task-inner{padding:0 .3rem}.kanban-task-minimized .task-archived{background:#e8e8e8;padding:.3rem;text-align:left}.kanban-task-minimized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-minimized .task-archived span{color:#bdbdbd}.kanban-task-minimized .task-archived .task-name{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-itemtype-project .icon svg,.list-itemtype-ticket .icon svg,.list-itemtype-timeline .icon svg,.list-itemtype-user .icon svg,.loading-spinner{max-height:1rem;max-width:1rem}.kanban-task-minimized .task-archived p{color:#bdbdbd;margin:0}.kanban-task-minimized .task-archived p:last-child{display:none}.kanban-task-minimized .task-num{vertical-align:top}.kanban-task-minimized .task-name{display:inline-block;overflow:hidden;width:135px}.kanban-task-minimized .task-points{display:none}.kanban-task-minimized .icon-drag-h,.kanban-task-minimized .icon-edit{top:1.4rem}.kanban-task-minimized .icon-edit{bottom:.2rem;right:1rem}.kanban-task-minimized .icon-drag-h{cursor:move;right:.1rem;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-task-minimized .kanban-tag{border-top:.2rem solid}.level{background-color:#bdbdbd;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project .list-itemtype-track,.list-itemtype-ticket .list-itemtype-track,.list-itemtype-timeline .list-itemtype-track,.list-itemtype-user .extra-info,.list-itemtype-user .list-itemtype-track{font-size:.9rem}.list-itemtype-ticket h2{font-size:1rem}.list-itemtype-project h2,.list-itemtype-user h2,.loader p{font-size:1.2rem}.list-itemtype-project p,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{font-family:opensans-regular,Arial,Helvetica,sans-serif}.list-itemtype-project{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-project h2,.list-itemtype-project p{margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-project-members,.list-itemtype-project .list-itemtype-project-tags{-webkit-align-self:flex-end;-ms-flex-item-align:end;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .list-itemtype-project-members{align-self:flex-end;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-project .list-itemtype-project-tags{align-self:flex-end;display:flex;-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5rem}.list-itemtype-project .tag{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket h2,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user h2,.list-itemtype-user p{margin-bottom:0}.list-itemtype-ticket,.list-itemtype-timeline,.list-itemtype-user{border-bottom:1px solid #f5f5f5;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user,.list-itemtype-user .list-itemtype-track{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-ticket .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .list-itemtype-avatar img{width:100%}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-project{color:#bdbdbd}.list-itemtype-ticket .list-itemtype-ticket-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-id{color:#bdbdbd;margin-right:.3rem}.list-itemtype-user{display:flex}.list-itemtype-user .list-itemtype-track{color:#bdbdbd;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-user .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .list-itemtype-avatar img{width:100%}.list-itemtype-user .extra-info{margin-top:.25rem}.list-itemtype-timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-timeline .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-timeline .list-itemtype-track-likers,.list-itemtype-timeline .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track-likers .icon,.list-itemtype-timeline .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-timeline .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-timeline .list-itemtype-track-likers.active,.list-itemtype-timeline .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-timeline h2{margin-bottom:0}.admin-menu li,.empty-backlog .title,.empty-burndown .title,.sprints-empty .title,.taskboard-table-header .task-colum-name,.ticket-data .ticket-title,.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,tg-project-menu{text-transform:uppercase}.list-itemtype-timeline .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.loader p{color:#757575;text-align:center}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar,.notification-light{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.loading-bar{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:loadBar;animation-name:loadBar;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;background:#757575;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{-webkit-animation-delay:0s;animation-delay:0s;background:#ffc107}.loading-bar .item-1{-webkit-animation-delay:1s;animation-delay:1s;background:#009688}.loading-bar .item-2{-webkit-animation-delay:2s;animation-delay:2s;background:#e91e63}.loading-bar .item-3{-webkit-animation-delay:3s;animation-delay:3s;background:#9c27b0}.loading-bar .item-4{-webkit-animation-delay:4s;animation-delay:4s;background:#cddc39}.loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}a.help-button,a.help-markdown{font-size:.9rem;color:#bdbdbd}a.help-button:hover span,a.help-markdown:hover span{color:#424242;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button:hover .icon,a.help-markdown:hover .icon{color:#8c9eff;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button .icon,a.help-markdown .icon{color:#bdbdbd;margin-right:.2rem}.markItUpHeader ul{background:#f5f5f5;padding:.3rem}.markItUpHeader ul li{display:inline-block;float:none}.markItUpHeader ul li a{opacity:.8}.markItUpHeader ul li a:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.markItUpHeader ul .preview-icon{position:absolute;right:2.5rem}.markItUpContainer{padding:0}.markdown{position:relative}.preview .actions{background:#f5f5f5;margin-top:.5rem;min-height:2rem;padding:.3rem}.notification-light p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.notification-message-success .warning{font-size:1.2rem;color:#fff;line-height:1.2}.notification-message-error .warning{font-size:2rem;color:#fff;line-height:2.4rem}.notification-message-error .icon-notification-error{font-size:3rem;display:inline;vertical-align:sub}.notification-message-error .warning,.notification-message-success .warning{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.notification-message-success{background:rgba(140,158,255,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);opacity:1;right:-370px;top:2%;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{-webkit-animation:animSlide 2s linear both;animation:animSlide 2s linear both;opacity:1}.notification-message-success p{margin:0}@-webkit-keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-light,.notification-message-error{-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%)}.notification-message-error{background:rgba(244,67,54,.9);top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error.inactive{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-light p,.notification-message-error .text p{margin:0}.notification-message-error .icon-delete{color:#fff;position:absolute;right:1rem;top:1rem}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(189,189,189,.95);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;padding:1rem;position:absolute;top:0;transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s;width:100%;z-index:99999}.paginator ul,.summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.notification-light.inactive{opacity:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s}.notification-light.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s;transition:all .6s}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{margin-right:1rem;width:2rem}.notification-light .close path{fill:#fff}.notification-message-light-error{background:rgba(244,67,54,.8)}.paginator{margin:2rem 0}.paginator ul{display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator .dots,.paginator a{background:#bdbdbd;color:#fff;padding:.5rem 1rem;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator a:hover{background:#212121;color:#fff;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .active span{background:#8c9eff}.paginator .dots{background:0 0;color:#bdbdbd}.v-pagination-list{overflow:hidden}.v-pagination-next,.v-pagination-previous{background-color:#757575;color:#f5f5f5;display:block;padding:.1rem 0;text-align:center;visibility:hidden;width:100%}.select-color,.select-color:after{background:#212121;position:absolute}.v-pagination-next:hover,.v-pagination-previous:hover{background-color:#212121;-webkit-transition:background .3s linear;transition:background .3s linear}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.private{display:inline-block;margin-left:.5rem;width:.5rem}.private svg{height:.5rem;width:.5rem}.private path{fill:#bdbdbd;-webkit-transition:fill .3s linear;transition:fill .3s linear}.select-color,.select-color a{font-size:.9rem}.select-color input{font-size:1rem}.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;border-radius:0 10px 10px 0;padding:15px}.select-color a{border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#8c9eff;-webkit-transition:color .3s linear;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#bdbdbd;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background-color:#f5f5f5;width:243px}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#bdbdbd;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary .description{font-size:.9rem}.empty-burndown .title{font-size:1.2rem}.empty-burndown,.empty-burndown .title,.summary .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.empty-burndown a,.summary .number{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.summary{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;padding:1em}.summary .summary-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#8c9eff}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{line-height:1}.summary .stats{cursor:pointer;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .color-line,.summary .stats:hover .graph{fill:#8c9eff;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats.active .color-line,.summary .stats.active .white-line{display:none}.summary .stats.active .graph{fill:#3f51b5}.summary .stats svg{height:100%;width:100%}.summary .stats .color-line,.summary .stats .graph{fill:#8a8a8a;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats .white-line{fill:#424242}.summary .stats .color-line,.summary .stats .white-line{display:block}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#8c9eff;height:24px}.summary-progress-bar .defined-points{background:#ff5252;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#8c9eff;height:24px;position:absolute}.large-summary{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.large-summary .large-summary-wrapper{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.large-summary .summary-progress-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.empty-burndown,.taskboard-task .taskboard-tagline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.large-summary .summary-progress-bar{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats-divider{margin-right:2rem}.large-summary .icon{font-size:1.4rem;margin-right:.4rem}.large-summary .icon.icon-stats{color:#3f51b5;float:right;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#8c9eff;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#8c9eff}.large-summary .icon.icon-stats.active:hover{color:#3f51b5;-webkit-transition:color .3s linear;transition:color .3s linear}.empty-burndown{-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;background:rgba(26,35,126,.15);display:flex;-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;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{-webkit-flex-basis:5rem;-ms-flex-preferred-size:5rem;flex-basis:5rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;width:5rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.empty-burndown .title{color:#1a237e;margin:0}.empty-burndown path{fill:#1a237e}.empty-burndown a{-webkit-animation:blink 2s infinite;animation:blink 2s infinite}.graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.wysiwyg,.wysiwyg .codehilite{overflow:auto}.graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;-webkit-transition:none;transition:none}.tag,.tags-block .add-tag-text,.tags-block .tag{font-size:.9rem}.tags-block .icon-plus{font-size:1.2rem}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-radius:0 5px 5px 0;color:#424242;display:inline-block;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.tag .icon-delete{color:#bdbdbd;margin-left:1rem}.tag .icon-delete:hover{color:#f44336}.ui-autocomplete{background:#fff;border:1px solid #bdbdbd;z-index:99910}.ui-autocomplete .ui-state-focus{background:#8c9eff}.ui-autocomplete li{cursor:pointer}.ui-helper-hidden-accessible{display:none}.tags-block .tags-container{display:inline-block}.tags-block input{padding:.4rem;width:14rem}.tags-block .tag{margin:0 .5rem .5rem 0;padding:.5rem}.tags-block .add-tag{color:#bdbdbd}.tags-block .add-tag:hover{color:#8c9eff}.taskboard-task .task-assigned,.taskboard-task .taskboard-text,.taskboard-task .taskboard-user-avatar a{font-size:.9rem}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit,.taskboard-task .icon-iocaine{font-size:1.2rem}.taskboard-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.taskboard-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.taskboard-task:hover .icon-drag-h,.taskboard-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.taskboard-task.ui-sortable-placeholder{background:#424242}.taskboard-task.blocked{background:#f44336;border:1px solid #ea1c0d;color:#fff}.taskboard-task.blocked a,.taskboard-task.blocked span,.taskboard-task.blocked:hover .icon-drag-h,.taskboard-task.blocked:hover .icon-edit{color:#fff}.taskboard-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.taskboard-task .taskboard-tagline{border-color:#f1e8cd;display:flex;height:.6rem}.taskboard-task .taskboard-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.taskboard-task .taskboard-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.taskboard-task .taskboard-user-avatar{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:55px}.taskboard-task .taskboard-user-avatar a{display:block;text-align:center}.taskboard-task .taskboard-user-avatar img{margin:0 auto}.taskboard-task .taskboard-user-avatar img:hover{border:2px solid #3f51b5;-webkit-transition:border .3s linear;transition:border .3s linear}.taskboard-task .iocaine img{-webkit-filter:hue-rotate(150deg) saturate(200%);filter:hue-rotate(150deg) saturate(200%)}.taskboard-task .icon-iocaine{background:#000;border-radius:5px;color:#fff;left:.2rem;padding:.1rem;position:absolute;top:1rem}.taskboard-task .task-assigned{color:#cfc29b;display:block}.taskboard-task .task-assigned:hover{color:#3f51b5}.taskboard-task .task-num{color:#424242;margin-right:.5em}.taskboard-task .taskboard-text{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;padding:0 .5rem 0 1rem;word-wrap:break-word}.taskboard-task .icon{-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task .loading{bottom:.5rem;position:absolute}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit{bottom:.5rem;color:#f1e8cd;opacity:0;position:absolute}.taskboard-task .icon-drag-h:hover,.taskboard-task .icon-edit:hover{color:#cfc29b}.taskboard-task .icon-edit,.taskboard-task .loading{right:1rem}.taskboard-task .icon-drag-h{font-size:2rem;cursor:move;right:45%}.task-drag{box-shadow:1px 1px 15px 6px rgba(0,0,0,.1)}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.track-button .track-inner{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border-radius:4px 0 0 4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;margin-right:.1rem;min-width:140px}.track-button .track-button-counter,.watch-options a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.track-button .track-inner:hover{background:#e8e8e8;-webkit-transition:background .3s;transition:background .3s}.track-button .track-inner span{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.track-button .track-inner .icon-arrow-up{margin-left:auto;padding:0 .5rem;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.track-button:hover{color:#212121}.track-button.active .track-inner{background:rgba(140,158,255,.2)}.track-button.active .track-icon path{fill:#3f51b5}.track-button.watch-container{margin-right:1rem;position:relative}.track-button .track-icon{padding:.3rem .6rem .3rem .75rem}.track-button .track-icon svg{height:1.1rem;position:relative;top:2px;width:1.1rem}.track-button .track-icon path{fill:#424242}.track-button .track-button-counter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-width:2rem}.like-button.active.is-hover .track-inner,.watch-button.active.is-hover .track-inner{background:#f44336;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.like-button.active.is-hover path,.watch-button.active.is-hover path{fill:#ff5252}.watch-options{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.admin-project-export-result .spin img,.ticket-assigned-to .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.watch-options li{margin:0}.assigned-to-list,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid rgba(189,189,189,.3);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.watch-options a.active{color:#8c9eff}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check path{fill:#8c9eff}.upvote-btn{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#bdbdbd;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#1a237e;-webkit-transition:background .3s;transition:background .3s}.upvote-btn a:hover path{fill:#1a237e}.upvote-btn a.active{background:rgba(140,158,255,.2);color:#3f51b5;-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.active path{fill:#3f51b5}.upvote-btn a.is-hover{background:#f44336;color:#f5f5f5}.upvote-btn a.is-hover svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover path{fill:#ff5252}.upvote-btn svg{height:1rem;width:1rem}.upvote-btn span{display:block}.upvote-btn path{fill:#bdbdbd}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#424242;margin-left:.5rem}.assigned-to-list .user-list-single,.ticket-watchers .user-list-single{-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;background:0 0;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem .5rem .3rem;vertical-align:middle}.assigned-to-list .user-list-single:last-child,.ticket-watchers .user-list-single:last-child{border:0}.assigned-to-list .user-list-avatar,.ticket-watchers .user-list-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.assigned-to-list .user-list-single:hover{background:#fff;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{background:#fff;cursor:pointer;margin-bottom:1rem;position:relative;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.1s;transition-delay:.1s}.assigned-to-list .user-list-single.is-active .icon-delete{opacity:1;position:absolute;right:1rem;top:1.3rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-single:hover .icon-delete{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.ticket-watchers .icon-delete{opacity:0;position:absolute;right:.5rem;top:0;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.ticket-watchers .icon-delete:hover{color:#f44336;-webkit-transition:color .3s ease-in;transition:color .3s ease-in}.wysiwyg code,.wysiwyg pre{font-size:.9rem}.wysiwyg h2{font-size:1.2rem;margin-bottom:.5rem}.wysiwyg h1{font-size:2rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.wysiwyg h2,.wysiwyg h3{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.wysiwyg{line-height:1.4rem;padding:1rem}.wysiwyg h1{line-height:2.5rem}.wysiwyg ol,.wysiwyg ul{list-style-position:outside;margin-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#3f51b5}.wysiwyg a:hover{color:#8c9eff}.wysiwyg p{line-height:1.4rem;margin-bottom:1rem}.wysiwyg code,.wysiwyg pre{background:#5c5c5c;color:#f5f5f5;direction:ltr;font-family:'courier new',monospace;margin-bottom:1rem;overflow:auto;unicode-bidi:embed;white-space:pre}.admin-functionalities .functionality .title,.admin-membership-table .avatar .name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-membership-table .avatar figcaption span,.admin-submenu ul a span,.admin-submenu-roles .single-role,.admin-webhooks .webhook-url span,.custom-fields-table .custom-description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wysiwyg pre{line-height:1.4rem;padding:.5rem}.wysiwyg table{border:1px solid #bdbdbd;margin-bottom:1rem}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#bdbdbd 1px solid}.wysiwyg th{border-right:#bdbdbd 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#bdbdbd 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#b8b8b8;margin-bottom:2rem}.admin-common .total{font-size:1.2rem;background-color:#f5f5f5;color:#444;padding:.3rem 1rem}.admin-common .total:hover .edit-value{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0;padding:.5rem 0}.custom-fields-table .table-header{border-bottom:3px solid #f5f5f5}.custom-fields-table .table-header .custom-description span,.custom-fields-table .table-header .custom-name span{padding-left:1.1rem}.custom-fields-table .table-body form:last-child .row{border:0}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;-webkit-transition:background .2s linear;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag-v{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .table-body .custom-description{color:#b8b8b8}.custom-fields-table .single-custom-field{border-bottom:1px solid #f5f5f5;color:#555}.custom-fields-table .icon-drag-v{color:#b8b8b8;opacity:0;padding:0 .1rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .icon-drag-v:hover{color:#555;cursor:move;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{color:#555;margin-right:.5rem}.custom-fields-table .custom-name{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-description{max-width:100%;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.custom-fields-table .custom-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-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;opacity:0;text-align:center}.custom-fields-table .custom-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-fields-table form .custom-options-wrapper{opacity:1}.admin-functionalities form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.admin-functionalities .functionality{-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;background-color:#f5f5f5;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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.3rem;margin-right:.3rem;opacity:.5;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:top;width:32%}.admin-functionalities .functionality.active{background-color:rgba(114,161,20,.3);opacity:1}.admin-functionalities .functionality .icon{font-size:3rem;-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;margin:0 auto;min-width:60px}.admin-functionalities .functionality .desc{text-align:center;width:100%}.admin-functionalities .functionality .activate-input{display:none}.admin-functionalities .functionality .activate-input+label{color:#fff;cursor:pointer;display:block;text-align:center}.admin-functionalities .functionality .title{display:block}.admin-functionalities .functionality select{margin-top:1rem}.admin-functionalities .videoconference-attributes select{margin-bottom:.5rem}.admin-functionalities .button-green{color:#fff;display:block;text-align:center}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.admin-membership-table .avatar figcaption{margin-left:1rem;width:75%}.admin-membership-table .avatar figcaption span{width:100%}.admin-membership-table .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:35px}.admin-membership-table .avatar .email,.admin-membership-table .avatar .name{display:block;width:100%}.admin-membership-table .avatar .email{color:#b8b8b8}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#f5f5f5}.admin-membership-table .resend{background-color:#72a114;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;-webkit-transition:background-color .3s linear;transition:background-color .3s linear}.admin-membership-table .delete{font-size:1.2rem;color:#b8b8b8}.admin-membership-table .delete:hover{color:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.admin-menu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #dcdcdc}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-result .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{width:100%}.admin-project-export-result h3{font-size:1.2rem;font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#b8b8b8;margin:.5rem 0;text-align:center}.project-details .privacy-settings label,.project-details input,.project-details label,.project-details textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.project-details form{max-width:700px;width:100%}.project-details fieldset{margin-bottom:1rem}.project-details label{display:block;margin-bottom:.2rem}.project-details textarea{height:10rem}.project-details .privacy-settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.project-details .privacy-settings>div{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;position:relative}.project-details .privacy-settings>div:first-child{margin-right:.5rem}.project-details .privacy-settings label{border:1px solid #b8b8b8;cursor:not-allowed;display:block;text-align:center;-webkit-transition:all .2s linear;transition:all .2s linear}.project-details .privacy-settings label span{color:#b8b8b8}.project-details .privacy-project{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.project-details .privacy-project:checked+label{background:#9dce0a;border:1px solid #9dce0a}.project-details .privacy-project:checked+label span{color:#fff}.project-details .button-green{color:#fff;display:block;text-align:center}.project-details .delete-project{font-size:.9rem;display:block;margin-top:1rem}.admin-roles .general-category{font-size:.9rem}.admin-roles .edit-value{font-size:1rem}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-roles .edit-value{color:#b8b8b8;cursor:pointer;margin-left:.5rem;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-roles .edit-role{background-color:#f5f5f5;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .edit-role .icon-floppy{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .edit-role .icon-floppy:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;display:inline-block}.admin-submenu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.admin-contrib .help .alt-image,.admin-contrib .help code,.admin-contrib .select-input-text .help-copy,.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-body span,.admin-webhooks .history-single-response-header a{font-size:.9rem}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a span{display:block;max-width:85%}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child,.admin-webhooks .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body .response-container,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-webhooks .table-header{border-bottom:1px solid #b8b8b8}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #f5f5f5}.admin-webhooks .webhooks-options{margin-bottom:1rem;text-align:right}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.admin-webhooks .webhook-url{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.admin-webhooks .webhook-url span{max-width:65%;color:#b8b8b8;display:inline-block;vertical-align:middle}.admin-contrib .help code,.admin-third-parties .help code{direction:ltr;line-height:1.4rem;unicode-bidi:embed;white-space:pre}.admin-webhooks .webhook-url a{color:#72a114;margin-left:.5rem}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;min-width:100px;text-align:center}.admin-webhooks .webhook-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.admin-webhooks .webhook-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .webhooks-history.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #f5f5f5;margin-left:22%}.admin-webhooks .history-single{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header a,.admin-webhooks .history-single-response-header span:first-child{color:#b8b8b8}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{-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;background:#f5f5f5;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-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.backlog-table-body,.backlog-table-header,.kanban-table,.taskboard-table,.wiki-summary .wiki-user-modification{-webkit-box-orient:vertical;-webkit-box-direction:normal}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{color:#b8b8b8;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{border:0;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib h2,.admin-contrib label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.admin-contrib .help h3,.admin-contrib .help ol span{font-family:opensans-semibold}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #f5f5f5;margin-bottom:1rem;padding-bottom:1rem}.admin-contrib .contrib-input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.admin-contrib .contrib-test{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:7.5rem;-ms-flex-preferred-size:7.5rem;flex-basis:7.5rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-left:.5rem;text-align:center}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .contrib-form-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-contrib .select-input-text .help-copy{opacity:0}.admin-contrib .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-contrib .check-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0}.admin-contrib .help{margin-top:2rem}.admin-contrib .help h3{margin-bottom:1rem}.admin-contrib .help ol{padding:0 0 0 2rem}.admin-contrib .help .img{margin-bottom:1rem}.admin-contrib .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-contrib .help .code-info{padding-left:1rem}.admin-contrib .help .code-info li{margin-bottom:.5rem}.admin-contrib .help .code-info span{font-family:opensans-semibold}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv .csv-regenerate-field a{font-size:.9rem;min-width:110px}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field .icon{margin-right:.3rem}.project-csv .field-with-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:1rem;width:100%}.project-csv .field-with-options input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row .icon,.project-values-settings a{font-size:1.2rem}.admin-third-parties .help .alt-image,.admin-third-parties .help code,.admin-third-parties .select-input-text .help-copy,.backlog-table-body .doom-line span,.backlog-table-body .pop-points,.backlog-table-body .pop-points a,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open a,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-body .pop-role,.backlog-table-body .pop-role a,.backlog-table-body .pop-status,.backlog-table-body .pop-status a,.backlog-table-body .row,.backlog-table-body .tags-block .tag,.backlog-table-header .pop-points,.backlog-table-header .pop-points a,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open a,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom a,.backlog-table-header .pop-role,.backlog-table-header .pop-role a,.backlog-table-header .pop-status,.backlog-table-header .pop-status a,.backlog-table-header .row,.login-form-container .forgot-pass,.register-form-container .register-text{font-size:.9rem}.project-values-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{color:#b8b8b8;opacity:0}.project-values-row .icon:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.project-values-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #f5f5f5}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-header .points,.login-form-container .remember-me+label{cursor:pointer}.project-values-body .project-values-row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.project-values-name{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.project-values-value{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{color:#555;margin-right:.5rem}.project-values-settings a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.project-values-settings a:hover .icon-delete{color:red}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.admin-third-parties .help h3,.admin-third-parties .help ol span{font-family:opensans-semibold}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p,.change-password-text{color:#444;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-third-parties .help{margin-top:2rem}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties .help h3{margin-bottom:1rem}.admin-third-parties .help ol{padding:0 0 0 2rem}.admin-third-parties .help .img{margin-bottom:1rem}.admin-third-parties .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-third-parties .help .code-info li,.cancel-account p{margin-bottom:.5rem}.admin-third-parties .help .code-info{padding-left:1rem}.admin-third-parties .help .code-info span{font-family:opensans-semibold}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-email-form p{margin-bottom:.5rem}.change-password-form-container .token-change-password{position:relative}.change-password-form-container input:focus+.get-token{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.change-password-form-container .get-token{font-size:.9rem;color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.change-password-form-container .get-token:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.login-form-container .forgot-pass{color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;-webkit-transition:all .3s linear;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.login-form-container .remember-me{vertical-align:top}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin-bottom:1rem;text-align:center}.backlog-table-header .backlog-table-title{font-size:1rem}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a,.empty-backlog .title{font-size:1.2rem}.backlog-table-body .doom-line span{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.backlog-table-body .pop-points,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-body .user-story-name a,.backlog-table-header .pop-points,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-role,.backlog-table-header .pop-status,.empty-backlog{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.backlog-table-body,.backlog-table-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-subtitle:hover,.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-subtitle:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-subtitle .input,.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-subtitle .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-webkit-flex-basis:25px;-ms-flex-preferred-size:25px;flex-basis:25px;-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}.backlog-table-body .backlog-table-subtitle .votes,.backlog-table-body .backlog-table-title .votes,.backlog-table-body .row .votes,.backlog-table-header .backlog-table-subtitle .votes,.backlog-table-header .backlog-table-title .votes,.backlog-table-header .row .votes{color:#555;-webkit-flex-basis:65px;-ms-flex-preferred-size:65px;flex-basis:65px;-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-align:center}.backlog-table-body .backlog-table-subtitle .votes.inactive,.backlog-table-body .backlog-table-title .votes.inactive,.backlog-table-body .row .votes.inactive,.backlog-table-header .backlog-table-subtitle .votes.inactive,.backlog-table-header .backlog-table-title .votes.inactive,.backlog-table-header .row .votes.inactive{color:#b8b8b8}.backlog-table-body .backlog-table-subtitle .votes.is-voted,.backlog-table-body .backlog-table-title .votes.is-voted,.backlog-table-body .row .votes.is-voted,.backlog-table-header .backlog-table-subtitle .votes.is-voted,.backlog-table-header .backlog-table-title .votes.is-voted,.backlog-table-header .row .votes.is-voted{color:#9dce0a}.backlog-table-body .backlog-table-subtitle .user-stories,.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-subtitle .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{overflow:hidden;width:100%}.backlog-table-body .backlog-table-subtitle .status,.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-subtitle .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-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}.backlog-table-body .backlog-table-subtitle .points,.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-subtitle .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-webkit-flex-basis:125px;-ms-flex-preferred-size:125px;flex-basis:125px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point,.empty-backlog,.sprints .loading,.sprints .sprint-table .sprint-empty{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{color:#b8b8b8;margin-left:.2rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px 3rem 10px 10px;position:absolute;width:150px;z-index:99}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{background:#050505;bottom:0;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:auto;width:200px;z-index:99}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .user-story-name,.sprints .sprint-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:opensans-regular,Arial,Helvetica,sans-serif;border-bottom:2px solid #b8b8b8;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:30px}.backlog-table-header .header-points span{color:#b8b8b8}.backlog-table-body .row{border-bottom:1px solid #ebebeb;cursor:move;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in;-webkit-transition-delay:.2s;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag-v,.backlog-table-body .row:hover .us-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .is-checked,.backlog-table-body .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.backlog-table-body .user-story-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .doom-line{background:red;margin:.2rem 0;padding:.6rem 0;position:relative;width:100%}.backlog-table-body .doom-line span{color:#fff;position:absolute;right:.5rem;top:-3px}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in;width:30px}.backlog-table-body .icon-drag-v:hover,.backlog-table-body .us-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .us-settings{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 0 0 2rem;opacity:0}.backlog-table-body .icon-drag-v{cursor:move;opacity:0;padding:.1rem .5rem 0 0}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.empty-backlog{padding:2rem}.empty-backlog img{margin-bottom:1rem}.empty-backlog .title{margin-bottom:.5rem}.empty-backlog a{color:#72a114}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint .description{font-size:.75rem}.sprints .filter-closed-sprints,.sprints .sprint-table .column-us,.sprints .us-item-row .user-story-name{font-size:.9rem}.sprints .sprint .number,.sprints .sprint .sprint-date,.sprints .sprint-name a,.sprints-empty .title{font-size:1.2rem}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint-header{-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;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#72a114;padding:.25rem .25rem 0;-webkit-transition:background .2s;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{height:1.4rem;width:1.5rem}.sprints .add-sprint path{fill:#f5f5f5}.sprints .filter-closed-sprints{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading-spinner{border:0;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.sprints .sprint-name a{max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;margin-right:3px}.sprints .sprint{margin-bottom:2rem;overflow:hidden}.sprints .sprint header{position:relative}.sprints .sprint:hover .icon-edit{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.sprints .sprint .icon{display:inline-block}.sprints .sprint .icon-arrow-up{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:baseline}.sprints .sprint .icon-arrow-up.active{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.sprints .sprint .icon-arrow-up:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.sprints .sprint .icon-edit{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;vertical-align:baseline}.sprints .sprint .icon-edit:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.sprints .sprint .description{line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{color:#b8b8b8;-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1}.sprints .sprint .sprint-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.sprints .sprint ul{margin:0}.sprints .sprint li{display:inline-block}.sprints .sprint li:first-child{margin-right:3px}.sprints .sprint-progress-bar{background:#b8b8b8;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#72a114;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table .sprint-empty{background:#e6e6e6;border:2px dashed #d2d2d2;color:#555;padding:1rem}.sprints .sprint-table .row{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:#d7d7d7;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .row.readonly,.taskboard-table .taskboard-task.readonly{cursor:auto}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.sortable-placeholder{background:#d7d7d7;height:40px}.sprints .sprint-table .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .column-us{-webkit-flex-flow:3;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.sprints .sprint-table .us-name.closed{color:#c5c5c5}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#c5c5c5}.sprints .sprint-table .column-points.blocked{color:red}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .icon-drag-v,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input,.taskboard-table-body .column-fold .taskboard-task .icon,.taskboard-table-body .column-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .column-fold .taskboard-task .taskboard-text,.taskboard-table-body .row-fold .taskboard-task .icon,.taskboard-table-body .row-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .row-fold .taskboard-task .taskboard-text{display:none}.sprints .us-item-row .user-story-name{line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#b8b8b8}.sprints-empty a,.taskboard-table-header .task-colum-name .icon:hover{color:#72a114}.sprint-closed .sprint-progress-bar .current-progress{background:#9f9f9f}.sprint-closed .button-gray{background:#b8b8b8}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{margin-bottom:.5rem}.taskboard-userstory-box .points-value{font-size:.9rem}.taskboard-table-header .task-colum-name .icon{font-size:1rem}.taskboard-table-header .task-colum-name,.taskboard-userstory-box .us-title{font-size:1.2rem}.taskboard-table-body .column-fold .taskboard-task,.taskboard-table-body .row-fold .taskboard-task{background:0 0;border:0;margin:0;min-height:0}.taskboard-table-body .column-fold .taskboard-task .taskboard-task-inner,.taskboard-table-body .row-fold .taskboard-task .taskboard-task-inner{padding:.2rem}.taskboard-table-body .column-fold .taskboard-task .avatar,.taskboard-table-body .row-fold .taskboard-task .avatar{height:35px;width:35px}.taskboard-table-body .column-fold .taskboard-task.ui-sortable-helper,.taskboard-table-body .row-fold .taskboard-task.ui-sortable-helper{box-shadow:none}.taskboard-table-body .column-fold .task-column,.taskboard-table-body .row-fold .task-column,.taskboard-table-body .task-column.column-fold,.taskboard-table-body .task-column.row-fold{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;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-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link,.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table,.taskboard-table-header .taskboard-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;overflow:hidden}.taskboard-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%}.taskboard-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:flex;position:absolute}.taskboard-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;width:300px}.taskboard-table-header .task-colum-name:last-child{margin-right:0}.taskboard-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-header .task-colum-name .icon.hfold,.taskboard-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.taskboard-table-header .task-colum-name.column-fold{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table-header .task-colum-name.column-fold span{display:none}.taskboard-table-header .task-colum-name.column-fold .hfold,.taskboard-table-header .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table-body{height:100%;overflow:auto;width:100%}.taskboard-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 10px 0 0;max-width:300px;width:300px}.taskboard-table-body .task-column:last-child{margin-right:0}.taskboard-table-body .column-fold .taskboard-task{max-width:40px;width:40px}.taskboard-table-body .task-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;min-height:10rem;width:100%}.taskboard-table-body .avatar-task-link,.taskboard-table-body .task-row.row-fold .icon-bulk,.taskboard-table-body .task-row.row-fold .icon-plus,.taskboard-table-body .task-row.row-fold .points-value{display:none}.taskboard-table-body .task-row:hover .new-task{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.taskboard-table-body .task-row.blocked .taskboard-userstory-box{background:rgba(255,0,0,.6)}.taskboard-table-body .task-row.blocked .points-value,.taskboard-table-body .task-row.blocked .points-value:hover,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a:hover{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.taskboard-table-body .task-row.blocked .taskboard-tasks-box{background:rgba(255,0,0,.1)}.taskboard-table-body .task-row.row-fold{min-height:0}.taskboard-table-body .task-row.row-fold .us-title{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskboard-table-body .taskboard-userstory-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-table-body .taskboard-userstory-box .icon{color:#b8b8b8;position:absolute;right:.5rem;top:.7rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-body .taskboard-userstory-box .icon:hover{color:#72a114}.taskboard-table-body .taskboard-userstory-box .icon.icon-plus{right:2rem}.taskboard-table-body .taskboard-userstory-box .icon.icon-vfold,.taskboard-table-body .taskboard-userstory-box .icon.icon-vunfold{left:0;right:inherit}.taskboard-table-body .avatar-assigned-to{display:block}.taskboard-userstory-box{position:relative}.taskboard-userstory-box .tag-list{display:none;margin-bottom:1rem}.attachments-header,.ticket-assigned-to{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.taskboard-userstory-box .us-title{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-userstory-box .points-value{color:#b8b8b8}.taskboard-userstory-box .points-value span{margin-right:.1rem}.points-list a{color:#72a114;margin-left:.5rem}.points-list a:hover span{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.points-list span{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem}.ticket-assigned-to{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;margin-bottom:1rem;position:relative}.ticket-assigned-to:hover .assigned-to .icon-delete{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;margin:1rem auto;max-height:2rem;max-width:2rem}.attachments,.duty-custom-fields{margin-bottom:2rem}.ticket-assigned-to .user-avatar{-webkit-flex-basis:4rem;-ms-flex-preferred-size:4rem;flex-basis:4rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .assigned-to{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.attachments-header .attachments-title,.colors-table .table-header,.single-attachment .attachment-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.ticket-assigned-to .assigned-to .user-assigned{font-size:1.2rem;color:#72a114;cursor:default;line-height:1.5rem}.ticket-assigned-to .assigned-to .user-assigned.editable{cursor:pointer}.ticket-assigned-to .assigned-to .user-assigned .icon{vertical-align:middle}.ticket-assigned-to .assigned-to .assigned-name{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ticket-assigned-to .assigned-to .icon-delete{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0}.ticket-assigned-to .assigned-to .icon-delete:hover{color:red}.add-attach span,.more-attachments,.single-attachment,.single-attachment .editable-attachment-comment{font-size:.9rem}.attachments-header .attachments-title{font-size:1rem;color:#444}.attachments-header .icon,.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings,.single-attachment .icon-delete{font-size:1.2rem}.attachments-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.attachments-header .attachments-num,.attachments-header .attachments-text{margin-right:.1rem}.attachments-header .icon{color:#444;cursor:pointer}.attachments-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.single-attachment{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem 1rem;position:relative}.category-config,.more-attachments{border-bottom:1px solid #b8b8b8}.single-attachment:hover .attachment-settings .settings{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.single-attachment.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.single-attachment.deprecated,.single-attachment.deprecated .attachment-name a{color:#b8b8b8}.single-attachment.sortable-placeholder{background:#f5f5f5;height:40px}.single-attachment .attachment-name{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:1rem}.single-attachment .attachment-name .icon{margin-right:.5rem}.single-attachment .attachment-size{color:#b8b8b8;-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem}.single-attachment .attachment-comments,.single-attachment .editable-attachment-comment{-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-comments span,.single-attachment .editable-attachment-comment span{color:#555}.single-attachment .attachment-settings{-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings{color:#b8b8b8;display:block;position:absolute}.single-attachment .attachment-settings .editable-settings:hover,.single-attachment .attachment-settings .settings:hover{color:#72a114}.single-attachment .attachment-settings .settings{opacity:0;top:.5rem}.single-attachment .attachment-settings .editable-settings{opacity:1;top:1rem}.single-attachment .attachment-settings .icon-edit,.single-attachment .attachment-settings .icon-floppy{right:3.5rem}.single-attachment .attachment-settings .icon-delete{right:2rem}.single-attachment .attachment-settings .icon-delete:hover{color:red}.single-attachment .attachment-settings .icon-drag-v{cursor:move;right:0}.single-attachment .icon-delete{color:#b8b8b8}.single-attachment .icon-delete:hover{color:red}.single-attachment .editable-attachment-deprecated{padding-left:1rem}.single-attachment .editable-attachment-deprecated span{color:#b8b8b8}.single-attachment .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.single-attachment .editable-attachment-deprecated input:checked+span{color:#444}.single-attachment .percentage{background:rgba(114,161,20,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.more-attachments{display:block;padding:1rem 0 1rem 1rem}.more-attachments span{color:#b8b8b8}.more-attachments .more-attachments-num{color:#72a114;margin-left:.5rem}.more-attachments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.add-attach{cursor:pointer;overflow:hidden;position:relative}.add-attach input{display:none}.category-config .category-item,.category-config .resume{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.add-attach span{color:#b8b8b8}.attachment-preview img{max-height:95vh;max-width:95vw}.category-config:first-child{border-top:1px solid #b8b8b8}.category-config .resume{-webkit-box-align:space-between;-webkit-align-items:space-between;-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:flex;padding:1rem;position:relative}.category-config .resume-title{width:280px}.category-config .count{color:#b8b8b8;float:left;padding-right:5px}.category-config .summary-role{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#b8b8b8;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#72a114}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .icon{font-size:2rem;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-align:right}.category-config .category-items{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden;background-color:#f5f5f5;width:100%}.category-config .category-items.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.colors-table .row,.duty-custom-fields .custom-fields-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #f5f5f5}.colors-table .icon,.colors-table .icon-check-square{font-size:1.2rem}.colors-table .table-header:hover{background:0 0}.colors-table .table-header .row{padding-left:50px}.colors-table form:last-child .row{border:0}.colors-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.colors-table .row:last-child{border:0}.colors-table .row.edition .current-color{cursor:pointer}.colors-table .row.edition,.colors-table .row.new-value{padding-left:50px}.colors-table .row.hidden{display:none}.colors-table .row .color-column{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.colors-table .row .status-name{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px;position:relative}.colors-table .row .status-name span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.colors-table .row .status-slug{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:130px;text-align:center}.colors-table .row .status-wip-limit{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#b8b8b8;border-radius:2px;height:40px;width:40px}.activity-single .activity-user img,.duty-custom-fields form input{width:100%}.colors-table .icon{color:#b8b8b8;margin-right:1rem;opacity:0}.colors-table .icon.icon-check-square,.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.colors-table .icon:hover{color:#72a114;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.colors-table .icon-delete:hover{color:red}.colors-table .icon-check-square{color:#72a114}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom{font-size:1.2rem;cursor:pointer;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom.open{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-fields-body{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.duty-custom-fields .custom-fields-body.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.duty-custom-fields .custom-field-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-single .custom-field-options{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-custom-fields .custom-field-single .custom-field-options a{color:#b8b8b8}.duty-custom-fields .custom-field-single .custom-field-options a:hover{color:#72a114}.duty-custom-fields .custom-field-data{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{color:#888;display:block;line-height:.9rem}.duty-custom-fields .custom-field-options{margin:0}.duty-custom-fields .custom-field-value{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields form label{cursor:pointer}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#b8b8b8;margin-top:.5rem}.external-reference a{border-left:1px solid #b8b8b8;padding:0 .2rem;-webkit-transition:color .3s linear;transition:color .3s linear}.external-reference a:hover{color:#72a114}.external-reference a:first-child{border:0}.activity-single .comment-restore,.activity-single .date,.activity-single .deleted-comment,.activity-single.deleted-comment,.change-entry .activity-fromto,.more-activity,.more-comments,.show-more-comments{font-size:.9rem}.activity-single .deleted-comment .comment-body p,.activity-single.deleted-comment .comment-body p{font-size:1rem}.history-tabs{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.change-entry .activity-changed{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.history{margin-bottom:1rem}.changes-title{display:block;padding:.5rem}.changes-title:hover .icon{color:#72a114;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.changes-title .icon{color:#444;float:right;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:all .2s linear;transition:all .2s linear}.change-entry{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.change-entry:last-child{border-bottom:0}.change-entry .activity-changed,.change-entry .activity-fromto{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.history-tabs{border-bottom:3px solid #b8b8b8;margin-bottom:0;padding:.5rem 0}.history-tabs li{font-size:1.2rem;display:inline-block}.history-tabs li:first-child{border-right:1px solid #b8b8b8}.history-tabs a{color:#b8b8b8;padding:0 2rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs a.active{color:#444}.history-tabs a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs .icon{margin-right:.5rem}.add-comment:after{clear:both;content:'';display:table}.add-comment.active .button-green{display:block}.add-comment.active textarea{height:6rem;-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.add-comment.active .help-markdown{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.add-comment.active .preview-icon{opacity:1;position:absolute;right:1rem}.add-comment .help-markdown,.add-comment .preview-icon,.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave.ng-leave-active:last-child{opacity:0}.add-comment textarea{background:#fff;height:5rem;margin-bottom:.5rem;min-height:41px}.add-comment .save-comment{color:#fff;float:right}.add-comment .button-green{display:none}.more-comments,.show-more-comments{color:#b8b8b8;display:block;border-bottom:1px solid #b8b8b8}.add-comment .edit,.add-comment .preview-icon{position:absolute;right:1rem}.show-more-comments{border-top:1px solid #b8b8b8;padding:1rem 0 1rem 1rem}.show-more-comments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.more-comments{padding:1rem}.more-comments .prev-comments-num{color:#72a114;margin-left:.5rem}.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{-webkit-transition:all .3s ease-in;transition:all .3s ease-in}.comment-list.activeanimation .comment-single.ng-enter.ng-enter-active:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{opacity:1}.activity-single{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2rem 0;position:relative}.activity-single:hover .comment-delete,.activity-single:hover .comment-restore{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.activity-single:first-child{margin-top:0}.activity-single:last-child{border-bottom:0}.activity-single .deleted-comment,.activity-single.deleted-comment{color:#b8b8b8;padding:.5rem}.activity-single .deleted-comment a,.activity-single.deleted-comment a{color:#b8b8b8;margin-left:.3rem}.activity-single .deleted-comment a:hover,.activity-single.deleted-comment a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .deleted-comment img,.activity-single.deleted-comment img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:.5}.activity-single .deleted-comment .comment-body,.activity-single.deleted-comment .comment-body{display:none;margin:.2rem 0 .5rem}.activity-single .activity-username,.activity-single .username{margin-bottom:.5rem;color:#72a114}.activity-single .comment-restore{color:#b8b8b8;position:absolute;right:0;top:.4rem}.activity-single .comment-restore .icon{vertical-align:baseline}.activity-single .comment-restore:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .activity-user{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.activity-single .activity-content{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:calc(100% - 80px)}.activity-single .changes{background:#f5f5f5}.activity-single .changes .change-entry{display:none}.activity-single .changes .change-entry.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.activity-single .date{color:#b8b8b8;margin-left:1rem}.activity-single .wysiwyg{margin-bottom:0}.activity-single .comment-delete{color:red;opacity:0;position:absolute;right:0;top:2rem;-webkit-transition:all .2s linear;transition:all .2s linear}.activity-single .comment-delete:hover{color:#ff8282;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single.activity .change-entry{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.more-activity{border-bottom:1px solid #b8b8b8;color:#b8b8b8;display:block;padding:1rem}.more-activity .prev-activity-num{color:#72a114;margin-left:.5rem}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox-generic-form label{font-size:.75rem}.lightbox-add-member .help-text,.lightbox-delete-account .newsletter input+label,.lightbox-sprint-add-edit .delete-sprint,.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem}.lightbox-select-user .more-watchers{font-size:1rem}.lightbox-add-member .add-member-wrapper .icon-delete,.lightbox-add-member .icon,.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-size:1.2rem}.lightbox h2{font-size:1.6rem}.lightbox .close,.lightbox-add-member .icon-delete{font-size:2rem}.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress,.lightbox-select-user .more-watchers{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.lightbox h2,.lightbox-delete-account .newsletter input+label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.lightbox .close{color:#555;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.lightbox-add-member .add-member-wrapper fieldset,.lightbox-generic-form fieldset{position:relative}.lightbox .close:hover{color:#72a114}.open.lightbox{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.lightbox{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox-generic-loading .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.lightbox-generic-form form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form textarea{margin-bottom:1rem;max-height:9rem;min-height:7rem;resize:vertical}.lightbox-generic-form label{background:#f5f5f5;border:1px solid #b8b8b8;color:#444;cursor:pointer;display:block;padding:7px 30px;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form label:hover span{color:#fff}.lightbox-generic-form label span{color:#444;vertical-align:middle}.lightbox-generic-form .settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem}.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox-generic-form .settings fieldset:hover{color:#fff;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-add-member .button,.lightbox-add-member .extra-text{margin-top:1rem}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #72a114}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#72a114;border:1px solid #72a114;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-bulk form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-block textarea,.lightbox-create-issue textarea{min-height:8rem;max-height:12rem;margin-bottom:1rem}.lightbox-search form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-search fieldset{margin-bottom:1rem}.lightbox-add-member .add-member-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.lightbox-add-member .add-member-wrapper:last-child,.lightbox-add-member fieldset{margin-bottom:0}.lightbox-add-member .add-member-wrapper fieldset:first-child{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.lightbox-add-member .add-member-wrapper fieldset:last-child{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.lightbox-add-member select{width:80%}.lightbox-add-member .icon{margin-left:.5rem}.lightbox-add-member .icon-delete:hover{color:red}.lightbox-add-member .help-text{padding:.5rem 1rem}.lightbox-add-member .checksley-error-list{right:.5rem}.lightbox-add-member .checksley-error-list li{display:none}.lightbox-add-member .checksley-error-list li:first-child{display:block}.lightbox-sprint-add-edit form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint{color:#444;display:block;margin-top:1rem;text-align:right}.lightbox-sprint-add-edit .delete-sprint a{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-sprint-add-edit .delete-sprint a:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-generic-ask form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-account form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row,.related-tasks-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.lightbox-delete-project .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-webkit-flex-basis:500px;-ms-flex-preferred-size:500px;flex-basis:500px;-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;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{max-height:100%;max-width:100%;width:100%}.lightbox-generic-loading .progress-bar-wrapper{background:#e8e8e8;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;-webkit-transition:width .1s linear;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#e8e8e8;bottom:35px;color:#555;padding:.3rem;position:absolute;-webkit-transition:left .1s linear;transition:left .1s linear}.lightbox-create-issue form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:flex}.main-nav a,.main-nav span{display:block}.lightbox-create-issue .fieldset-row fieldset{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block .form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.lightbox-select-user .more-watchers{padding:.5rem;text-align:center}.lb-create-edit-userstory .ticket-role-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;max-width:calc(100% * (1/5) - .2rem)}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(5n+5){margin-right:0}.lb-create-edit-userstory .points-per-role{margin-bottom:1rem}.main-nav a:hover .helper{font-size:.9rem}.main-nav .item{font-size:1.2rem}tg-project-menu{background-position:0 -300px;min-height:calc(100vh - 40px);padding:1rem 0}.main-nav{list-style:none;padding:0;position:relative;text-align:center}.related-tasks-body .row,.related-tasks-body .status{text-align:left;position:relative}.main-nav a{color:#fff;padding:.75rem .8rem;position:relative}.main-nav a:hover{background:rgba(0,0,0,.2);color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.main-nav a:hover .helper{-webkit-animation:slideLeft .2s ease-in-out both;animation:slideLeft .2s ease-in-out both;background:-webkit-linear-gradient(left,#000 0,rgba(0,0,0,.8) 100%);background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;padding:.4rem 1rem;position:absolute;top:calc(50% - 1rem);-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;z-index:99}.main-nav a:hover .helper:after{background:#050505;content:'';height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:12px;z-index:98}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .active{background:rgba(0,0,0,.2);color:#9dce0a}.main-nav .active svg path{fill:#9dce0a;opacity:1}@-webkit-keyframes slideLeft{0%{opacity:0}100%{opacity:1}}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.related-tasks-body .pop-status,.related-tasks-body .pop-status a,.related-tasks-body .row{font-size:.9rem}.related-tasks-body .task-name input,.related-tasks-header .related-tasks-title{font-size:1rem}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine,.related-tasks-body .task-settings a,.related-tasks-header .icon{font-size:1.2rem}.related-tasks-body .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.related-tasks-header .related-tasks-title{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.related-tasks{margin-bottom:2rem;position:relative}.related-tasks-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.related-tasks-header .icon{color:#444;cursor:pointer}.related-tasks-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.related-tasks-body{width:100%}.related-tasks-body .row{-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;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.5rem 0 .5rem .5rem;width:100%}.related-tasks-body .row:hover{background:0 0}.related-tasks-body .row:hover .task-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .row:last-child{border:0}.related-tasks-body .row .tasks{overflow:hidden;width:100%}.related-tasks-body .row .status{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100px}.related-tasks-body .row .assigned-to{cursor:pointer;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .status:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover a{text-align:left;width:100%}.related-tasks-body .status .popover .point{text-align:center}.related-tasks-body .status .icon{color:#b8b8b8;margin-left:.2rem;opacity:0}.related-tasks-body .pop-status{background:#050505;color:#fff;display:none;left:40%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.related-tasks-body .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.related-tasks-body .blocked .icon,.related-tasks-body .blocked .icon:hover,.related-tasks-body .blocked a,.related-tasks-body .blocked a:hover,.related-tasks-body .blocked:hover .icon,.related-tasks-body .blocked:hover .icon:hover,.related-tasks-body .blocked:hover a,.related-tasks-body .blocked:hover a:hover,.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .task-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.related-tasks-body .task-name a{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-name input{margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .task-name.loading span{-webkit-animation:loading .5s linear,spin 1s linear infinite;animation:loading .5s linear,spin 1s linear infinite}.filters-inner .loading .loading-spinner,.ticket-detail-settings .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:#ff8282;color:#fff}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .iocaine,.related-tasks-body .iocaine:hover{background:rgba(157,206,10,.3)}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine{display:inline-block;margin-right:.5rem;vertical-align:top}.related-tasks-body .task-settings{margin:0 0 0 2rem;opacity:0;position:absolute;right:0;top:0;width:10%}.related-tasks-body .task-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .task-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .assigned-to{position:relative;text-align:left}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto.editable{cursor:pointer}.related-tasks-body .task-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{opacity:0;position:absolute;right:.5rem;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-data .ticket-data-container,.ticket-status .priority-data .pop-priority,.ticket-status .priority-data .pop-priority a,.ticket-status .severity-data .pop-severity,.ticket-status .severity-data .pop-severity a,.ticket-status .status-data .pop-status,.ticket-status .status-data .pop-status a,.ticket-status .type-data .pop-type,.ticket-status .type-data .pop-type a,.ticket-track-buttons .track-inner{font-size:.9rem}.ticket-data .ticket-title span:last-child,.ticket-track-buttons .track-button-counter{font-size:1.2rem}.ticket-data .ticket-title,.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .status-data .pop-status,.ticket-status .type-data .pop-type,.ticket-track-buttons .track-inner{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-detail-settings .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.ticket-data .ticket-title{font-size:1.6rem;margin:1.5rem 0 2rem}.ticket-data .ticket-title span{margin-right:.25rem}.ticket-data .ticket-data-container{margin-bottom:1rem}.ticket-data .ticket-data-container .icon{margin-left:.25rem}.ticket-data .level{display:inline-block;margin-right:.5rem;vertical-align:top}.filters h1,.filters h1 a{vertical-align:baseline}.ticket-data .level-name{color:#c2c2c2;float:right;text-transform:lowercase}.ticket-data .ticket-estimation .ticket-role-points{max-width:25%}.ticket-data .ticket-estimation .ticket-role-points:first-child{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.ticket-status{margin-bottom:.5rem}.ticket-status:last-child{margin:0}.ticket-status div{background:#e8e8e8;padding:.5rem 1rem .5rem .5rem;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .clickable:hover{background:#dcdcdc;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .type-data{position:relative}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .type-data .pop-type a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .severity-data{position:relative}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .severity-data .pop-severity a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .priority-data .pop-priority:after,.ticket-status .status-data .pop-status:after{background:#050505;height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);content:''}.ticket-status .priority-data{position:relative}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .priority-data .pop-priority a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{position:absolute;transform:rotate(45deg);width:0}.ticket-status .status-data{position:relative}.ticket-status .status-data .pop-status{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .status-data .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .status-data .pop-status a:last-child{border:0}.ticket-status .status-data .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .status-data .pop-status a:hover.point{color:#fff}.ticket-status .status-data .pop-status:after{position:absolute;transform:rotate(45deg);width:0}.ticket-track-buttons .track-inner{background:#e8e8e8;padding:.25rem;text-transform:uppercase;-webkit-transition:background .25s;transition:background .25s}.ticket-track-buttons .track-inner:hover{background:#dcdcdc}.ticket-track-buttons .track-button{width:100%}.ticket-track-buttons .active .track-button-counter{background:rgba(68,68,68,.5)}.ticket-track-buttons .active:hover .track-inner{background:rgba(157,206,10,.2)}.ticket-track-buttons .active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.ticket-track-buttons .active.is-hover path{fill:#ff8282}.single-project .track-container .icon path,.single-project .track-container .list-itemtype-track-likers.active path,.single-project .track-container .list-itemtype-track-watchers.active path{fill:currentcolor}.ticket-track-buttons .track-button-counter{background:rgba(68,68,68,.25);color:#f5f5f5;padding:0 .5rem}.ticket-track-buttons .vote-button{margin-bottom:.3rem}.ticket-track-buttons .watch-button{border-bottom:0}.ticket-track-buttons .ticket-watchers{margin:.5rem 0}.wizard-create-project .create-step1 fieldset:first-child,.wizard-create-project .wizard-action a:first-child{margin-right:.5rem}.ticket-track-buttons .add-watcher{display:block;margin:.5rem}.ticket-track-buttons .add-watcher .icon{background:rgba(68,68,68,.25);color:#f5f5f5;margin-right:.5rem;padding:.25rem}.ticket-track-buttons .add-watcher:hover .icon{background:#9dce0a;color:#f5f5f5;-webkit-transition:background .3s linear;transition:background .3s linear}.ticket-detail-settings{margin-top:2rem}.ticket-detail-settings .button,.ticket-detail-settings label{display:block;margin-bottom:.5rem;text-align:center}.ticket-detail-settings .button.editable,.ticket-detail-settings label.editable{cursor:pointer}.ticket-detail-settings .button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .button-gray,.ticket-detail-settings .button-gray:hover{background:#b8b8b8}.ticket-detail-settings .button-gray.editable:hover{background:#444;cursor:pointer}.ticket-detail-settings .button-gray.active{background:#72a114}.ticket-detail-settings .item-block.editable:hover{background:red;cursor:pointer}.ticket-detail-settings .button-red{display:block;margin-top:2rem}.wizard-create-project{background:url(/images/invitation_bg.jpg) center center no-repeat;bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910;background-size:cover;color:#fff;text-align:center}.wizard-create-project p{font-size:.9rem}.wizard-create-project .close{font-size:2rem;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.open.wizard-create-project{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.wizard-create-project{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.wizard-create-project fieldset{margin-bottom:1rem}.wizard-create-project .button-gray,.wizard-create-project .button-green{display:block;padding:12px;text-align:center}.wizard-create-project form{width:500px}.wizard-create-project .title{text-align:center;width:100%}.wizard-create-project h1,.wizard-create-project p{color:#fff}.wizard-create-project h1{line-height:1.5rem}.wizard-create-project p{opacity:.8}.wizard-create-project input,.wizard-create-project select,.wizard-create-project textarea{background:rgba(255,255,255,.7)}.wizard-create-project input::-webkit-input-placeholder,.wizard-create-project select::-webkit-input-placeholder,.wizard-create-project textarea::-webkit-input-placeholder{color:#444}.wizard-create-project input::-moz-placeholder,.wizard-create-project select::-moz-placeholder,.wizard-create-project textarea::-moz-placeholder{color:#444}.wizard-create-project input:-moz-placeholder,.wizard-create-project select:-moz-placeholder,.wizard-create-project textarea:-moz-placeholder{color:#444}.wizard-create-project input:-ms-input-placeholder,.wizard-create-project select:-ms-input-placeholder,.wizard-create-project textarea:-ms-input-placeholder{color:#444}.wizard-create-project .close{color:#fff}.wizard-create-project .close:hover{color:#ff8282}.wizard-create-project .wizard-step{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out;-webkit-animation-direction:alternate-reverse;animation-direction:alternate-reverse;display:none}.wizard-create-project .wizard-step.active{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out}.wizard-create-project .wizard-step.active.create-step1,.wizard-create-project .wizard-step.active.create-step2,.wizard-create-project .wizard-step.active.create-step3{display:block}.wizard-create-project .wizard-action div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .wizard-action a{color:#fff;display:inline-block;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 .template-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .create-step1 fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 input{display:none}.wizard-create-project .create-step1 input:checked+label{background:rgba(157,206,10,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label{background:rgba(245,245,245,.7);cursor:pointer;display:block;margin-bottom:1rem;padding:1rem;text-align:center;-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label:hover{background:rgba(114,161,20,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label .icon{font-size:3rem;color:#fff}.wizard-create-project .create-step1 h2{color:#fff;margin:.5rem 0 0;text-transform:uppercase}.wizard-create-project .create-step1 p{text-align:center}.wizard-create-project .progress-bar{bottom:0;height:.5rem;left:0;position:absolute;width:100%}.wizard-create-project .step1 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:25%}.wizard-create-project .step1 .progress-state span:nth-child(1){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .step2 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:75%}.wizard-create-project .step2 .progress-state span:nth-child(1),.wizard-create-project .step2 .progress-state span:nth-child(2){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .progress-state{position:absolute;width:100%}.wizard-create-project .progress-state span{color:rgba(255,255,255,.5);display:inline-block;margin-left:-100px;position:absolute;text-align:center;top:-2rem;-webkit-transition:all 1s ease-in;transition:all 1s ease-in;width:200px}.wizard-create-project .progress-state span:nth-child(1){left:25%}.wizard-create-project .progress-state span:nth-child(2){left:75%}.wizard-create-project .progress-bar-wrapper{background:rgba(255,255,255,.3);height:.5rem}.wizard-create-project .bar{background:rgba(157,206,10,.9);height:.5rem;left:0;position:absolute;top:0;width:0}.create-project{background:url(https://lh4.googleusercontent.com/-k7YewfrSQ_Q/VGdNZND0NBI/AAAAAAAAD1A/UDZBeSGR7iM/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B480) center center no-repeat;background-size:cover;-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;bottom:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.create-project .tagline{font-size:2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#fff;line-height:2rem;text-transform:uppercase}.introjs-tooltip p,.single-project .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project fieldset{margin-bottom:1rem}.create-project .create-project-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.create-project h1{color:#fff;text-align:center}.create-project .logo,.create-project .tagline{margin-bottom:1rem;text-align:center}.create-project form{margin-bottom:2rem}.create-project input{background:#fff}.create-project input::-webkit-input-placeholder{color:#bdbdbd}.create-project input::-moz-placeholder{color:#bdbdbd}.create-project input:-moz-placeholder{color:#bdbdbd}.create-project input:-ms-input-placeholder{color:#bdbdbd}.create-project .button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.create-project .button:hover{background:#8c9eff}.create-project a:hover{color:#fff}.filters h2 .icon-arrow-right{font-size:1rem}.filters-inner .loading .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-width:1rem}.filters h1 .icon{margin:0}.filters h2 .icon-arrow-right,.single-project h1{vertical-align:middle}.filters h2{font-size:1.2rem;margin-top:1rem}.filters input{background:#444;color:#fff}.filters input::-webkit-input-placeholder{color:#b8b8b8}.filters input::-moz-placeholder{color:#b8b8b8}.filters input:-moz-placeholder{color:#b8b8b8}.filters input:-ms-input-placeholder{color:#b8b8b8}.filters .icon-search{color:#b8b8b8;position:absolute;right:.7rem;top:.7rem}.filters-inner{opacity:0;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.filters-inner .loading{margin:0;padding:8px;text-align:center;width:100%}.filters-applied{margin-top:.5rem}.filters-step-cat .save-filters{color:#fff;display:block;text-align:center}.filters-step-cat .my-filter-name{background:#444;color:#f5f5f5;width:100%}.filters-step-cat .my-filter-name::-webkit-input-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name::-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-ms-input-placeholder{color:#b8b8b8}.filters-cats{margin-top:2rem}.filters-cats li{border-bottom:1px solid #b8b8b8;text-transform:uppercase}.filters-cats .custom-filters .title{color:#72a114}.filters-cats a{color:#444;display:block;padding:.5rem 0 .5rem .5rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.filters-cats .icon{color:#444;float:right;opacity:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-overlay{background:-webkit-radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background-color:#f5f5f5}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#72a114;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .track-container .list-itemtype-track{font-size:.9rem}.single-project .description,.single-project .title{font-size:1rem}.single-project .single-project-intro{margin-bottom:2rem}.single-project .intro-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.single-project h1{color:#3f51b5;display:inline-block;line-height:1.2;margin-bottom:0;margin-right:3rem}.single-project .private{font-size:1rem;vertical-align:super}.single-project .like-watch-container{margin-left:auto}.single-project .track-buttons-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.single-project .project-data,.single-project .title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#3f51b5}.single-project .track-container .icon svg{max-height:1rem;max-width:1rem}.single-project .project-data{display:flex}.single-project .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-shrink:3;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .involved-data{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-organization,.single-project .involved-team{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-organization li,.single-project .involved-team li{margin-right:.14rem;width:24%}.single-project .involved-organization li:nth-child(4n),.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-organization a,.single-project .involved-team a{display:block}.single-project .involved-organization img,.single-project .involved-team img{border-radius:.2rem;width:100%}.issues-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table .pop-status,.issues-table .pop-status a,.issues-table .table-main{font-size:.9rem}.issues-table .title{font-size:1rem}.empty-issues .title{font-size:1.2rem;text-transform:uppercase}.empty-issues p,.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.issues-table .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8}.issues-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .avatar,.kanban-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .title:hover{background:0 0}.issues-table .title div{cursor:pointer}.issues-table .title .votes{color:#555}.issues-table .table-main{border-bottom:1px solid #ebebeb}.issues-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-webkit-flex-basis:60%;-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-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-align:center;width:75px}.issues-table .votes{color:#555;-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes.inactive{color:#b8b8b8}.issues-table .votes.is-voted{color:#9dce0a}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .created-field,.issues-table .issue-field{-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{opacity:0;position:absolute;right:0;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .pop-status{background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99}.issues-table .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1200px){.issues-table .created-field,.issues-table .level-field{display:none}}@media (max-width:767px){.issues-table .assigned-field,.issues-table .created-field,.issues-table .level-field{display:none}}.empty-issues{margin-top:4rem;text-align:center}.empty-issues img{margin-bottom:1rem}.empty-issues p,.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table-body .task-column .kanban-column-intro{font-size:.9rem}.kanban-table-body,.kanban-table-header .task-colum-name .icon{font-size:1rem}.kanban-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table .vfold.task-colum-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold .kanban-task,.kanban-table .vfold.task-colum-name .icon-bulk,.kanban-table .vfold.task-colum-name .icon-closed-eye,.kanban-table .vfold.task-colum-name .icon-open-eye,.kanban-table .vfold.task-colum-name .icon-plus,.kanban-table .vfold.task-colum-name .icon-vfold,.kanban-table .vfold.task-colum-name .icon-vunfold,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.task-column{-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.kanban-table-header .kanban-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.kanban-table-body,.kanban-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-header .task-colum-name{font-size:1.2rem;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem .5rem .5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.kanban-table-header .task-colum-name .icon.hfold,.kanban-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-table-header .icon-closed-eye,.kanban-table-header .icon-open-eye{display:inline-block}.kanban-table-header .icon-closed-eye svg,.kanban-table-header .icon-open-eye svg{fill:#b8b8b8;height:1.1rem;margin-top:.25rem;width:1.1rem}.kanban-table-header .icon-closed-eye:hover svg,.kanban-table-header .icon-open-eye:hover svg{fill:#72a114}.kanban-table-header .icon-open-eye .svg-eye-closed{display:none}.kanban-table-header .icon-closed-eye .svg-eye-closed,.kanban-table-header .icon-open-eye .svg-eye-open{display:block}.kanban-table-header .icon-closed-eye .svg-eye-open{display:none}.kanban-table-body{display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-inner,.search-filter ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;margin:0 10px 0 0;max-width:300px;overflow-y:auto;widows:300px}.kanban-table-body .task-column:last-child{margin-right:0}.kanban-table-body .task-column .kanban-column-intro{font-family:opensans-semibold,Arial,Helvetica,sans-serif;color:#b8b8b8;margin:1rem 2rem}.kanban-table-body .task-column .kanban-column-intro.active{color:#050505}.kanban-table-body .task-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-inner{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.search-filter a{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;opacity:.2}.search-filter ul{border-bottom:3px solid #b8b8b8;display:flex;padding-bottom:.5rem}.search-filter li{margin-right:1rem}.search-filter .active,.search-filter a:hover{color:#555;opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.search-filter .icon{margin-right:.4rem}.search-filter .name{padding-left:5px}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#b8b8b8}.search-in input::-moz-placeholder{color:#b8b8b8}.search-in input:-moz-placeholder{color:#b8b8b8}.search-in input:-ms-input-placeholder{color:#b8b8b8}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{color:#b8b8b8}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #f5f5f5}.search-result-table .user-story-name .icon{font-size:1rem;color:#b8b8b8}.empty-search-results .title{font-size:1.2rem;text-transform:uppercase}.search-result-table .row{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .row .ref{-webkit-flex-basis:30px;-ms-flex-preferred-size:30px;flex-basis:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 1rem}.search-result-table .row .user-stories{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.search-result-table .row .points,.search-result-table .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem}.search-result-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.search-result-table .points,.search-result-table .status{position:relative}.search-result-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.empty-search-results{margin-top:4rem;text-align:center}.empty-search-results img{margin-bottom:1rem}.empty-search-results p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.team-filters nav li{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.table-team .team-header,.team-filters nav li:last-child{border-bottom:0}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters nav a{display:block;padding:1rem 0 1rem 1rem}.team-filters nav a.active,.team-filters nav a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.team-filters nav .active,.team-filters nav a.active.icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.team-filters nav .icon{color:#050505;float:right;opacity:0}.table-team .leave-project,.table-team .popover,.table-team .popover a{font-size:.9rem}.table-team .attribute .points{font-size:1.6rem}.table-team .attribute,.table-team .attribute .points,.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.policy-table .policy-table-header,.table-team .avatar .name,.table-team .team-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.table-team .row{padding:.5rem}.table-team .username{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:6;-webkit-flex:6;-ms-flex:6;flex:6;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{color:#050505;font-size:1.8rem}.table-team .attribute .points{color:#444}.table-team .attribute .top{color:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{color:#b8b8b8;display:block}.table-team .leave-project .icon{margin-right:.2rem}.table-team .leave-project:hover .icon{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .hero{width:100%}.table-team .hero .row{background:#f5f5f5;border-bottom:0;margin:1rem 0}.table-team .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.table-team .avatar img{-webkit-flex-basis:66px;-ms-flex-preferred-size:66px;flex-basis:66px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:66px}.table-team .avatar figcaption{margin-left:1rem;width:65%}.table-team .avatar figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .position{color:#b8b8b8}.table-team .popover{background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99}.table-team .popover a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.policy-table .policy-table-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{border-bottom:2px solid #b8b8b8}.user-change-password label,.user-profile label{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#72a114;-webkit-transition:background .3s linear;transition:background .3s linear}.policy-table label{background:#b8b8b8;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile form .avatar-container p{font-size:.75rem}.user-profile .delete-account,.user-profile form .avatar-container .use-gravatar{font-size:.9rem}.user-profile form .avatar-container span{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.user-profile form .avatar-container .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem}.user-profile form{max-width:700px;width:100%}.user-profile form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.user-profile form .avatar-container{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:1rem}.user-profile form .avatar-container .image-container{position:relative}.user-profile form .avatar-container .avatar{border-radius:8%;width:100%}.user-profile form .avatar-container .overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile form .avatar-container .loading-spinner{border:0;min-height:3rem;min-width:3rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.user-profile form .avatar-container p{line-height:.8rem;margin-bottom:.3rem;text-align:center}.user-profile form .avatar-container .use-gravatar{cursor:pointer;display:inline-block;text-align:center;width:100%}.user-profile form .data{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.user-profile fieldset{margin-bottom:1rem}.user-profile .submit{margin-top:2rem}.user-profile label{display:block;margin-bottom:.5rem}.user-profile textarea{min-height:7rem}.user-profile .button-green{color:#fff;cursor:pointer;display:block;padding:12px;text-align:center}.user-profile .delete-account{display:block;margin-top:1rem}.wiki-nav li input{font-size:1rem}.wiki-nav li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.wiki-nav li:hover .icon{opacity:1;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li a{display:block;padding:1rem 0 1rem 1rem}.wiki-nav li a span{cursor:pointer}.wiki-nav li .icon{color:#050505;float:right;opacity:0;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background:#444;color:#f5f5f5}.wiki-nav li input::-webkit-input-placeholder{color:#b8b8b8}.wiki-nav li input::-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-ms-input-placeholder{color:#b8b8b8}.wiki-nav li .loading{margin:0;padding:8px;text-align:center;width:100%}.wiki-nav .add-button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.wiki-summary .wiki-user-modification,.wiki-summary div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.wiki-summary .username{font-size:1.2rem;color:#9dce0a;white-space:nowrap}.wiki-summary{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary div{display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:1rem}.wiki-summary .number{line-height:2rem;top:0}.wiki-summary .wiki-user-modification{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary figure{margin-right:.3rem;width:32px}.external-app-wrapper .app-card a,.external-app-wrapper .app-card p,.external-app-wrapper .user-card a{font-size:.75rem}.external-app-wrapper .cancel{font-size:.9rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:6rem;margin:0 auto;width:6rem}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.external-app-wrapper .app-card a,.external-app-wrapper .button-green,.external-app-wrapper .user-card a{display:block}.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card .app-image{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .cancel{display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #f5f5f5;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;-webkit-transition-delay:.2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single.blocked,.working-on .duty-single.blocked{background:rgba(255,130,130,.2);color:red}.watching .duty-single>a,.working-on .duty-single>a{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:0;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}.empty-ticket .data,.home-project-list li a{-webkit-box-orient:vertical;-webkit-box-direction:normal}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper,.home-wrapper .title-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-wrapper{display:flex}.home-wrapper .duty-summary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .project-list{width:250px}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;margin:0 0 .5rem;padding:.9rem 1rem}.empty-ticket,.home-project-list li a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-project-list p{font-size:.75rem}.projects-empty p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.home-project-list h2,.home-project-list p{font-family:opensans-regular,Arial,Helvetica,sans-serif}.home-project-list li{border:1px solid #dedede;border-radius:3px;cursor:pointer;margin-bottom:.75rem;padding:1rem;text-overflow:ellipsis}.home-project-list li:hover{border-color:#9dce0a;-webkit-transition:all .3s linear;transition:all .3s linear}.home-project-list li:hover p{color:#555;-webkit-transition:color .3s linear;transition:color .3s linear}.home-project-list li:hover .private path{fill:#555;-webkit-transition:fill .3s linear;transition:fill .3s linear}.home-project-list li a{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:5rem}.home-project-list h2{color:#555;font-size:1.5rem;line-height:1.3;margin-bottom:.5rem;text-transform:none}.home-project-list h2 .project-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.home-project-list p{color:#b8b8b8;line-height:125%;margin:0}.projects-empty{text-align:center}.projects-empty svg{height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty svg path{fill:#f5f5f5}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:2rem 9rem 1rem;text-align:center}.empty-ticket{display:flex}.empty-ticket .data,.navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.empty-ticket:not(:last-child){border-bottom:1px solid #f5f5f5;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e8e8e8;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:40vw}.empty-ticket .line:last-child{margin:0;width:20vw}.navbar{display:flex;height:40px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar:after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar .nav-left>a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left>a.logo{background:rgba(0,0,0,.2);padding:.4rem .75rem}.navbar .nav-left>a svg{height:1.6rem;max-width:2rem}.navbar .nav-left>a path{fill:#fff}.navbar .nav-right{margin-left:auto}.navbar .nav-right a{color:#fff;padding:.5rem 2rem}.navbar a{color:#fff;display:inline-block;-webkit-transition:all .2s linear;transition:all .2s linear}.navbar a svg path{fill:#131a5c}.navbar a:hover{background:rgba(0,0,0,.2);color:#8c9eff}.navbar a:hover svg path{fill:#fff}.navbar a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar a.user-avatar span{padding-right:1rem}.navbar img{height:2.5rem;padding-left:.5rem;vertical-align:middle}.navbar svg{height:1.2rem;max-width:1.2rem}.navbar svg path{fill:#fff;-webkit-transition:all .2s;transition:all .2s}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(33,33,33,0);border-bottom-color:#212121}.navbar-dropdown ul:after{border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown a{color:#bdbdbd;display:block;padding:.8rem .5rem}.navbar-dropdown .create-options,.profile-filter{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#8c9eff}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.navbar-dropdown a.import-project-button{padding-left:.75rem;padding-right:.75rem}.navbar-dropdown .create-options{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.profile-favs{border-top:1px solid #f5f5f5}.profile-filter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile,.profile-filter .searchbox{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.profile-filter .searchbox{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{color:grayer;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs,.profile-projects,.profile-timeline{border-top:1px solid #f5f5f5}.profile-filter .searchbox input:focus{border-bottom:1px solid #b8b8b8;outline:0;-webkit-transition:border-bottom .3s ease-in;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#b8b8b8;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile .timeline-wrapper .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-height:3rem;max-width:3rem}.profile{display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{background:#fff;margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;-webkit-transition:all .3s cubic-bezier(.09,.43,.35,.95);transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .profile-sidebar{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{margin:2rem auto;max-width:160px;text-align:center}.profile .empty-tab p{font-size:.9rem}.profile-bar .profile-stats .stat-name{font-size:.9rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username{font-size:1.2rem}.profile-bar h2{font-size:1.6rem}.profile-bar .profile-stats .stat-number,.profile-bar h1{font-size:2rem}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .profile-organizations h3,.profile-bar .profile-stats .stat-number,.profile-bar h1{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{-webkit-filter:brightness(40%) saturate(150%) hue-rotate(60deg);filter:brightness(40%) saturate(150%) hue-rotate(60deg);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1);-webkit-transition-delay:.3s;transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.01,.7,1,1);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#b8b8b8;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar h1{line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar h2{color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#b8b8b8;margin-bottom:1rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#b8b8b8}.profile-bar .profile-stats{border-bottom:1px solid #f5f5f5;color:#555;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{display:block;line-height:1}.profile-bar .profile-stats .stat-name{display:block}.profile-bar .profile-organizations{border-bottom:1px solid #f5f5f5;border-top:1px solid #f5f5f5;margin-bottom:1rem;padding:1rem 0}.profile-bar .profile-organizations h3{margin-bottom:.5rem}.profile-bar .profile-organizations .profile-organizations-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.profile-bar .profile-organizations .organization{background:#b8b8b8;border-radius:5px;height:45px;margin-right:.2rem;width:45px}.profile-bar .profile-quote{background:url(/images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contact-single .profile-contact-data h1 span{font-size:.9rem}.profile-contact-single .profile-contact-data .extra-info{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-contact-single .profile-contact-data h1,.profile-contact-single .profile-contact-data h1 span{font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-contacts{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}.profile-contact-filters{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.profile-contact-filters a{border-bottom:2px solid #fff;color:#b8b8b8;display:inline-block;padding:1rem 1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-contact-filters a.active,.profile-contact-filters a:hover{border-bottom:2px solid #b8b8b8;color:#72a114}.profile-contact-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.8rem 1rem}.profile-contact-single .profile-contact-picture{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:1rem;max-width:54px}.profile-contact-single .profile-contact-picture img{border-radius:.2rem;width:100%}.profile-contact-single .profile-contact-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-contact-single .profile-contact-data h1{font-size:1.2rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:1.6;margin-bottom:0;text-transform:none}.profile-contact-single .profile-contact-data h1 span{background:#f5f5f5;color:#555;margin-left:1rem;padding:.1rem .3rem}.profile-contact-single .profile-contact-data p{color:#555;margin-bottom:0}.profile-contact-single .profile-contact-data .extra-info{color:#555}.profile-contact-single .profile-contact-data .position{margin-right:.3rem}.profile-contact-single .profile-project-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-left:auto;width:100px}.profile-contact-single .profile-project-stats div{color:#b8b8b8;margin-right:.5rem}.profile-contact-single .profile-project-stats div .icon{margin-right:.2rem;vertical-align:center}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#b8b8b8;display:inline-block;padding:1rem 1.25rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #f5f5f5;border-right:1px solid #f5f5f5;position:relative;top:1px;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .icon{margin-right:.4rem}.profile-sidebar h4{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.profile-sidebar h4 .icon{color:#b8b8b8;margin-right:.3rem;vertical-align:text-bottom}.profile-sidebar p{font-size:.9rem;color:#b8b8b8}.profile-sidebar a{color:#72a114}.profile-sidebar .trans-button{margin-bottom:1rem}.profile-projects .list-itemtype-project{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:10rem}.profile-projects .list-itemtype-project .list-itemtype-project-right{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-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:200px}.project-list-wrapper .help-area{font-size:.9rem;color:#b8b8b8;width:200px}.project-list-wrapper .drag{font-size:1.2rem}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.project-list-wrapper .create-options a.create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .create-options a.import-project-button{padding:.53rem .8rem}.project-list-wrapper .create-options a.import-project-button:hover{background:#444}.project-list-wrapper .create-options a.import-project-button .icon-upload{margin:0}.project-list-wrapper .project-list-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .placeholder{background-color:#fdfdfd;height:5rem}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:#fcfef8;cursor:move;-webkit-transition:background .3s;transition:background .3s}.master,body{background:#fff}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .drag{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:#b8b8b8;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.profile-timeline .single-attachment span{font-size:1rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child,.profile-timeline .activity-member-view a{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-timeline .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.profile-timeline .activity-item{border-bottom:1px solid #f5f5f5;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#72a114}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#b8b8b8;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-webkit-flex-basis:2rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-member-view{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-timeline .activity-member-view p{color:#b8b8b8}a,body{color:#424242}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.profile-timeline .single-attachment .icon{margin-right:.3rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{max-height:3rem;max-width:3rem}:root .taskboard-table-body .task-row,_:-ms-fullscreen .task-row{min-height:auto}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}.menu-secondary{background:#fcfdff}.menu-tertiary{background-color:#1a237e}.extrabar{background:#fcfdff}h1,h2,h3,h4,h5,h6{color:#212121}a:hover{color:#3f51b5}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#3f51b5;color:#424242}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a4a4a4}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#a4a4a4}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#a4a4a4}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a4a4a4}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #f44336}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);color:#fff}blockquote{border-left:5px solid #8c9eff}blockquote,blockquote p,cite{color:#757575}.summary{background:#424242;color:#fff}.kanban-table-header .task-colum-name .icon,.taskboard-table-header .task-colum-name .icon{color:#3f51b5}.navbar{background:rgba(233,30,99,.6)}.navbar:after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#0d113f;background-image:none}.main-nav svg path{fill:#fff}.taskboard-table-header .task-colum-name{background:#f2f4ff;border-top:3px solid #3f51b5}.taskboard-table-body .taskboard-tasks-box{background:#f5f5f5}.kanban-table-header .task-colum-name{background:#f2f4ff;border-top:3px solid #3f51b5}.kanban-table-body .kanban-uses-box{background:#f5f5f5} \ No newline at end of file + */.pika-single{display:block;position:relative;width:240px;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.introjs-bullets ul,.introjs-button,.pika-select{display:inline-block}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;position:absolute!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid #fff;position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-color:transparent transparent #fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow.left,.introjs-arrow.right{top:10px}.introjs-arrow.right,.introjs-arrow.right-bottom{right:-10px;border-color:transparent transparent transparent #fff}.introjs-arrow.right-bottom{bottom:10px}.introjs-arrow.bottom{bottom:-10px;border-color:#fff transparent transparent}.introjs-arrow.left,.introjs-arrow.left-bottom{left:-10px;border-color:transparent #fff transparent transparent}.introjs-arrow.left-bottom{bottom:10px}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{position:relative;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-progress,.loader-active,.taskboard,.taskboard-inner,body.loading-project,h1 .date,h1 span{overflow:hidden}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.admin-membership header a,.header-with-actions .button,.kanban .kanban-settings,.save-wiki{float:right}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.master,fieldset{position:relative}body,html{width:100%;min-height:100%}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}body{font-family:opensans-regular,Arial,Helvetica,sans-serif;line-height:1.3}.icon{font-family:taiga}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body .master.ng-animate{-webkit-transition:0;transition:0}.drag-active{overflow-x:hidden}.master{height:100%;min-height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu-secondary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary.filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:0}.menu-secondary.filters-bar.active{padding:2em 1em;-webkit-transition:all .2s linear;transition:all .2s linear;width:260px}.menu-secondary.filters-bar.active .filters-inner{opacity:1;-webkit-transition:all .4s ease-in;transition:all .4s ease-in}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions .action-buttons{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;margin-left:10px}fieldset,p img{margin:0}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}h2{font-size:2rem}h1,h1 span{font-size:3rem}h1,h2{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}.wysiwyg dl dt,strong{font-weight:700}h1{margin-bottom:1rem;text-transform:uppercase}h1 span{margin-right:.5rem;vertical-align:bottom}h1 span.green,h1 span:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#3f51b5}h1 .date{max-width:500px;color:#bdbdbd}h2{line-height:1.2;margin-bottom:1rem}p{line-height:1.5}em{font-style:italic}[class*=' icon-']:before,[class^=icon-]:before,[data-icon]:before{font-family:taiga!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;speak:none;text-transform:none!important}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{-webkit-transition:color .3s linear;transition:color .3s linear}[data-icon]:before{content:attr(data-icon)}.admin-contrib .help .alt-image,.admin-third-parties .help .alt-image,.wysiwyg dl dt{font-style:italic}.icon-bug:before{content:'a'}.icon-copy:before{content:'b'}.icon-minimize:before{content:'c'}.icon-maximize:before{content:'d'}.icon-comment:before{content:'e'}.icon-plus:before{content:'f'}.icon-attachments:before{content:'g'}.icon-edit:before{content:'h'}.icon-documents:before{content:'i'}.icon-delete:before{content:'j'}.icon-arrow-bottom:before{content:'k'}.icon-arrow-left:before{content:'l'}.icon-arrow-right:before{content:'m'}.icon-arrow-up:before{content:'n'}.icon-briefcase:before{content:'o'}.icon-caret-down:before{content:'p'}.icon-caret-up:before{content:'q'}.icon-check-square:before{content:'r'}.icon-notification-error:before{content:'s'}.icon-settings:before{content:'t'}.icon-document:before{content:'u'}.icon-warning:before{content:'v'}.icon-move:before{content:'w'}.icon-drag-v:before{content:'x'}.icon-filter:before{content:'y'}.icon-help:before{content:'z'}.icon-reload:before{content:'A'}.icon-writer:before{content:'B'}.icon-stats:before{content:'C'}.icon-floppy:before{content:'D'}.icon-warning-alt:before{content:'E'}.icon-video:before{content:'F'}.icon-bulk:before{content:'G'}.icon-vunfold:before{content:'H'}.icon-tasks:before{content:'I'}.icon-kanban:before{content:'J'}.icon-search:before{content:'K'}.icon-wiki:before{content:'L'}.icon-team:before{content:'M'}.icon-vfold:before{content:'N'}.icon-issues:before{content:'O'}.icon-iocaine:before{content:'P'}.icon-archive:before{content:'Q'}.icon-capslock:before{content:'R'}.icon-upload:before{content:'S'}.icon-github:before{content:'T'}.icon-timeline:before{content:'U'}.icon-scrum:before{content:'V'}.icon-project:before{content:'W'}.icon-heart:before{content:'X'}.icon-eye:before{content:'Y'}@-webkit-keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@-webkit-keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;flex:10}}@keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;-ms-flex:10;flex:10}}@-webkit-keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes blink{85%{opacity:1}100%{opacity:.6}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote cite,sup{font-size:.9rem}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{display:block}blockquote cite:before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}sup{vertical-align:super}.blocked-warning .icon,.icon,.us-story-main-data .us-title.blocked{vertical-align:middle}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}.pika-single{z-index:999999}.pika-single .pika-title{color:#424242}.pika-single .is-selected .pika-button{background:#3f51b5;border-radius:0!important;box-shadow:inset 0 1px 3px #3f51b5}.pika-single .is-today .pika-button{color:#3f51b5}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#8c9eff!important;border-radius:0!important;box-shadow:inset 0 1px 3px #8c9eff!important}fieldset{border:0;padding:0;width:100%}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{-webkit-transition:border .3s linear;transition:border .3s linear}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.icon-capslock{bottom:.6rem;color:#757575;display:none;position:absolute;right:1rem}.auth,.error-main{bottom:0;z-index:999;left:0}.admin-membership header:after{clear:both;content:'';display:table}.admin-membership .check input{height:40px;width:85px}.admin-roles p{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#bdbdbd}.auth .logo,.auth .tagline{color:#fff;text-align:center}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.kanban,.taskboard{height:calc(100vh - 40px)}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);position:absolute;width:100%}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.project-values-title{-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;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem;text-transform:uppercase}.project-values-title h2{margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(https://lh4.googleusercontent.com/-k7YewfrSQ_Q/VGdNZND0NBI/AAAAAAAAD1A/UDZBeSGR7iM/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B480) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.invitation-main .avatar,.invitation-main .invitation-container,.kanban{-webkit-box-orient:vertical;-webkit-box-direction:normal}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth .logo{font-size:3rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.auth .auth-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{padding:0 33%;text-align:center;width:100%}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{text-align:center}.auth .login-text a:hover,.auth .register-text a:hover{color:#8c9eff}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moustache;animation-name:moustache;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;fill:rgba(63,81,181,.9);stroke:#8c9eff;stroke-width:1px;-webkit-transform-origin:50% 20%;-ms-transform-origin:50% 20%;transform-origin:50% 20%;-webkit-transition:.3s;transition:.3s}.moustache:hover{fill:rgba(140,158,255,.9);-webkit-transition:.3s;transition:.3s}.list-itemtype-project .icon path,.list-itemtype-project .list-itemtype-track-likers.active path,.list-itemtype-project .list-itemtype-track-watchers.active path,.list-itemtype-ticket .icon path,.list-itemtype-ticket .list-itemtype-track-likers.active path,.list-itemtype-ticket .list-itemtype-track-watchers.active path,.list-itemtype-timeline .icon path,.list-itemtype-timeline .list-itemtype-track-likers.active path,.list-itemtype-timeline .list-itemtype-track-watchers.active path,.list-itemtype-user .icon path,.list-itemtype-user .list-itemtype-track-likers.active path,.list-itemtype-user .list-itemtype-track-watchers.active path{fill:currentcolor}@-webkit-keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}.backlog-menu{background:#f5f5f5;color:#212121;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .trans-button{color:#212121;display:inline-block;padding:.4rem 1.5rem}.backlog-menu .trans-button.active,.backlog-menu .trans-button:hover{background:#757575;color:#f5f5f5}.backlog-menu .trans-button.active:hover{background:#c2c2c2}.backlog-menu .trans-button.move-to-current-sprint{display:none}.invitation-main,.invitation-main .invitation-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-menu .button-bulk{margin-left:.2rem}.invitation-main{background:url(https://lh6.googleusercontent.com/-2l_mJ5g6j4k/VGdNZCpaERI/AAAAAAAAD2o/zCx5Z3cYv6Y/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B497) center center no-repeat;-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;background-size:cover;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;z-index:999}.invitation-main .invitation-form .forgot-pass{font-size:.9rem}.invitation-main .avatar .person-name,.invitation-main .invitation-text,.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.invitation-main .invitation-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar .person-name{color:#fff}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{color:#fff;text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{color:#bdbdbd;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#424242;-webkit-transition:color .3s linear;transition:color .3s linear}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header,.invitation-main .register-text{color:#fff}.invitation-main .login-form,.invitation-main .register-form{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .register-text a{color:#3f51b5}.invitation-main .button-auth{display:block}.error-main,.kanban{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.invitation-main .button-blackish:hover{background:#3f51b5}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.issues .filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:260px}.issues .filters-inner{opacity:1;padding:1rem}.kanban{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px)}.kanban header{min-height:70px}.kanban .burndown-container{display:none}.error-main{background:url(https://lh6.googleusercontent.com/-2l_mJ5g6j4k/VGdNZCpaERI/AAAAAAAAD2o/zCx5Z3cYv6Y/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B497) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.taskboard-inner,.us-story-main-data header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table,.taskboard-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal}.error-main .error-container{color:#fff;-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff;margin-bottom:3rem}.error-main a{color:#3f51b5}.error-main a:hover{color:#8c9eff}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.taskboard-inner{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.team h2{margin:1rem 0}.team h2 span:last-child{color:#3f51b5}.us-story-main-data .us-title .block-desc-container,.us-story-main-data .us-title .us-related-task{font-size:.9rem}.us-story-main-data .us-title,.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{font-size:1.2rem}.blocked-warning .blocked,.blocked-warning .icon,.issue-nav a,.us-story-main-data .us-title .us-name,.us-story-main-data .us-title .us-number{font-size:2rem}.blocked-warning .blocked,.us-story-main-data .us-title .us-number{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.us-story-main-data .us-title{font-family:opensans-regular,Arial,Helvetica,sans-serif}.us-story-main-data .us-title .block-description-title,.us-story-main-data .us-title.blocked .unblock{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.us-story-main-data{margin-bottom:2rem}.us-story-main-data header{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.us-story-main-data .us-title{background:#f5f5f5;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked{background:#f44336;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked .us-title-text,.us-story-main-data .us-title.blocked input{margin-bottom:.5rem}.us-story-main-data .us-title.blocked .us-name,.us-story-main-data .us-title.blocked .us-number,.us-story-main-data .us-title.blocked .us-related-task{color:#fff}.us-story-main-data .us-title.blocked a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title.blocked a:hover{color:#ff5252}.us-story-main-data .us-title.blocked .unblock{color:#fff;float:right}.us-story-main-data .us-title.blocked .unblock:hover{color:#ff5252;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title p{margin-bottom:0}.us-story-main-data .us-title .us-edit-name-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.us-story-main-data .us-title .edit-subject{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.basic-table,.us-story-main-data .us-title .us-title-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.us-story-main-data .us-title input{background:#fff;-webkit-box-flex:9;-webkit-flex-grow:9;-ms-flex-positive:9;flex-grow:9}.us-story-main-data .us-title .save-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.us-story-main-data .us-title .us-title-text{-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;display:flex;margin-bottom:0;max-width:94%}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{max-height:1.5rem;max-width:1.5rem}.us-story-main-data .us-title .us-title-text:hover .icon-edit{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.us-story-main-data .us-title .us-number{color:#bdbdbd;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;line-height:2.2rem;margin-right:.5rem}.us-story-main-data .us-title .us-name{color:#424242;display:inline-block;line-height:2.2rem;padding-right:1rem;width:100%}.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{color:#bdbdbd;margin-left:.5rem}.us-story-main-data .us-title .icon-edit{opacity:0}.us-story-main-data .us-title .us-related-task{color:#bdbdbd;margin-top:.5rem}.us-story-main-data .us-title .us-related-task a{border-left:1px solid #bdbdbd;padding:0 .2rem}.us-story-main-data .us-title .us-related-task a:hover{color:#3f51b5}.us-story-main-data .us-title .us-related-task a:first-child{border:0}.us-story-main-data .us-title .block-description-title{color:#fff;margin-right:.5rem}.us-story-main-data .us-title .block-description{color:#fff;display:inline-block;margin-right:5rem}.blocked-warning{margin-bottom:1rem}.blocked-warning .blocked{color:#f44336;line-height:2.5rem;margin-bottom:.5rem}.blocked-warning .block-description{color:#424242;margin:0}.duty-content .edit-description,.wiki-content,.wysiwyg{margin-bottom:2rem}.issue-nav{position:absolute;right:1rem;top:1rem}.duty-content{position:relative}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#424242}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#bdbdbd}.duty-content textarea{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-content .edit{color:#424242}.duty-content .view-description .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .save{top:.4rem}.duty-content .edit-description .edit{position:absolute;right:2.5rem;top:.4rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.wysiwyg textarea{background:#fff;max-height:none}.wiki .remove{font-size:.9rem;color:#bdbdbd}.wiki .remove:hover span{color:#424242;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove:hover .icon{color:#f44336;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove .icon{color:#bdbdbd;margin-right:.2rem}.wiki-content{position:relative}.wiki-content.editable:hover .wysiwyg{background:#f5f5f5;cursor:pointer}.wiki-content .view-wiki-content:hover .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .view-wiki-content .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .icon:hover{color:#424242;opacity:.3;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .preview-icon{position:absolute;right:3.5rem}.wiki-content .edit-wiki-content .action-container{position:absolute;right:1rem;top:.3rem}.wiki-content .edit-wiki-content .edit{position:absolute;right:3.5rem;top:.4rem}.wiki-content .preview{padding-top:1.8rem}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row,.card-placeholder .placeholder-avatar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table .row,.empty-burndown,.loading-bar{-webkit-box-orient:horizontal}.basic-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:flex;-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;padding:.3rem 0;text-align:left;width:100%}.basic-table .row .width-1{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:4;-webkit-flex-grow:4;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:5;-webkit-flex-grow:5;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:7;-webkit-flex-grow:7;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.beta{left:0;position:absolute;top:0;z-index:9999}.button,.button-auth,.button-blackish,.button-bulk,.button-gray,.button-green,.button-red,.trans-button,a.button-gray,a.button-green{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:0 0;border:0;color:#fff;cursor:pointer;display:inline-block;padding:.4rem 2rem;text-align:center;text-transform:uppercase;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.trans-button{font-size:1rem}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button:hover,.trans-button:hover{color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.trans-button span{-webkit-animation:loading .5s linear;animation:loading .5s linear}.button span,.button-auth span,.button-blackish span,.button-bulk span,.button-gray span,.button-green span,.button-red span,.trans-button span{color:#fff}.button .icon,.button-auth .icon,.button-blackish .icon,.button-bulk .icon,.button-gray .icon,.button-green .icon,.button-red .icon,.trans-button .icon{color:#fff;margin-right:.3rem}.trans-button .icon,.trans-button span{color:#212121;-webkit-transition:color .2s linear;transition:color .2s linear}.trans-button.active .icon,.trans-button.active span,.trans-button:hover .icon,.trans-button:hover span{color:#3f51b5}.trans-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#3f51b5}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#8c9eff;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#8c9eff;color:#fff}.button-blackish{background:#212121;color:#f5f5f5}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff5252}.button-red:hover{background:#f44336;color:#fff}.button-red .icon{color:#fff}.button-block{background:#fff;color:#f44336}.button-block:hover{background:#ff5252;color:#fff}.button-bulk{background:#3f51b5;padding:.35rem .5rem}.button-bulk .icon{margin-right:0}.button-bulk:hover{background:#8c9eff}.button-auth{background:#424242}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.card-placeholder{background:#f0f0f0;border:1px dashed #e1e1e1;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:flex}.card-placeholder .image{background:#e1e1e1;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.card-placeholder .line{background:#e1e1e1;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#dcdcdc;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:500px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.check input+div{background-color:#757575;height:25px;-webkit-transition:all .2s linear;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:opensans-regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#8c9eff;margin-left:50%;-webkit-transition:all .2s linear;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.single-filter,.ticket-created-by .created-by .created-title.editable{cursor:pointer}.check input:disabled+div{background-color:#bdbdbd}.ticket-created-by{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;margin-top:.5rem;position:relative}.ticket-created-by .user-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;line-height:1.5}.ticket-created-by .created-by .created-title{color:#3f51b5}.ticket-estimation .popover,.ticket-estimation .popover a,.ticket-estimation .popover.fix,.ticket-estimation .popover.fix a,.ticket-estimation .ticket-role-points .role{font-size:.9rem}.ticket-estimation .ticket-role-points .points{font-size:1.6rem}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .points-per-role{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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}.ticket-estimation .ticket-role-points{background:rgba(189,189,189,.1);border-radius:2px;color:rgba(66,66,66,.3);-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:.1rem;padding:.5rem 0 .1rem;position:relative;text-align:center;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .ticket-role-points.active{background:rgba(140,158,255,.9);color:#f5f5f5}.ticket-estimation .ticket-role-points:first-child{background:rgba(66,66,66,.25);border-radius:0;color:#f5f5f5}.ticket-estimation .ticket-role-points:last-child{border:0}.ticket-estimation .ticket-role-points .points{font-family:opensans-regular,Arial,Helvetica,sans-serif;display:block;text-align:center}.ticket-estimation .ticket-role-points .role{max-width:90%;overflow:hidden;display:inline-block;text-align:center}.ticket-estimation .popover{background:#212121;color:#fff;display:none;left:35%;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover a{border-bottom:1px solid #424242;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;content:'';height:10px;left:10px;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#8c9eff;color:#fff}.ticket-estimation .popover.fix{background:#212121;color:#fff;display:none;left:-160px;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover.fix a{border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#8c9eff;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;content:'';height:10px;left:90%;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.single-filter{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem;opacity:.5;position:relative}.single-filter:after{clear:both;content:'';display:table}.single-filter.active,.single-filter.selected,.single-filter:hover{color:#424242;opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{background:#dcdcdc;display:block;width:100%}.single-filter .number{background:#c2c2c2;position:absolute;right:0;top:0}.single-filter .icon-delete{color:#424242;position:absolute;right:.5rem;top:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.single-filter .icon-delete:hover{color:#f44336;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task .avatar a,.kanban-task .task-text,.kanban-task-maximized .task-archived p,.kanban-task-maximized .task-points,.kanban-task-minimized .task-archived{font-size:.9rem}.kanban-task-minimized .icon-drag-h{font-size:1rem}.kanban-task .icon-drag-h,.kanban-task .icon-edit{font-size:1.2rem}.kanban-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.kanban-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.kanban-task:last-child{margin-bottom:0}.kanban-task:hover .icon-drag-h,.kanban-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.kanban-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.kanban-task.ui-sortable-placeholder{background:#424242}.kanban-task.blocked{background:#f44336;border:1px solid #ea1c0d;color:#fff}.kanban-task.blocked a,.kanban-task.blocked span{color:#fff}.kanban-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.kanban-task .kanban-tagline{border-color:#f1e8cd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:.6rem}.kanban-task .kanban-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.kanban-task .kanban-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.kanban-task .avatar-wrapper{-webkit-flex-basis:55px;-ms-flex-preferred-size:55px;flex-basis:55px;-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;width:55px}.kanban-task .avatar-wrapper img{width:100%}.kanban-task .avatar a{text-align:center}.kanban-task .avatar img{margin:0 auto}.kanban-task .avatar img:hover{border:2px solid #3f51b5;-webkit-transition:border .3s linear;transition:border .3s linear}.kanban-task .task-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 .5rem 0 .8rem}.kanban-task .task-assigned{color:#cfc29b;display:block}.kanban-task .task-num{color:#424242;margin-right:.3rem}.kanban-task .loading{bottom:.5rem;position:absolute}.kanban-task .icon-drag-h,.kanban-task .icon-edit{color:#f1e8cd;opacity:0;position:absolute;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.kanban-task .icon-drag-h:hover,.kanban-task .icon-edit:hover{color:#e0cd91;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task-maximized .task-archived{background:#e8e8e8;padding:.5rem;text-align:left;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived:hover{background:#e1e1e1;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-maximized .task-archived span{color:#bdbdbd}.kanban-task-maximized .task-archived p{color:#bdbdbd;margin:0}.kanban-task-maximized .task-archived p:last-child{color:#757575;margin:.5rem 0;text-align:center}.kanban-task-maximized .icon-edit,.kanban-task-maximized .loading{bottom:.2rem;right:.5rem}.kanban-task-maximized .icon-drag-h{font-size:2rem;bottom:.2rem;cursor:move;right:45%}.kanban-task-maximized .task-points{color:#e0cd91;margin:0}.kanban-task-maximized .task-points span{display:inline-block}.kanban-task-maximized .task-points span:first-child{padding-right:.2rem}.kanban-task-maximized .task-points .points-text{text-transform:lowercase}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{line-height:1.4;text-transform:none}.kanban-task-maximized .kanban-tag{border-top:.3rem solid}.kanban-task-minimized .kanban-task-inner{padding:0 .3rem}.kanban-task-minimized .task-archived{background:#e8e8e8;padding:.3rem;text-align:left}.kanban-task-minimized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-minimized .task-archived span{color:#bdbdbd}.kanban-task-minimized .task-archived .task-name{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-itemtype-project .icon svg,.list-itemtype-ticket .icon svg,.list-itemtype-timeline .icon svg,.list-itemtype-user .icon svg,.loading-spinner{max-height:1rem;max-width:1rem}.kanban-task-minimized .task-archived p{color:#bdbdbd;margin:0}.kanban-task-minimized .task-archived p:last-child{display:none}.kanban-task-minimized .task-num{vertical-align:top}.kanban-task-minimized .task-name{display:inline-block;overflow:hidden;width:135px}.kanban-task-minimized .task-points{display:none}.kanban-task-minimized .icon-drag-h,.kanban-task-minimized .icon-edit{top:1.4rem}.kanban-task-minimized .icon-edit{bottom:.2rem;right:1rem}.kanban-task-minimized .icon-drag-h{cursor:move;right:.1rem;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-task-minimized .kanban-tag{border-top:.2rem solid}.level{background-color:#bdbdbd;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project .list-itemtype-track,.list-itemtype-ticket .list-itemtype-track,.list-itemtype-timeline .list-itemtype-track,.list-itemtype-user .extra-info,.list-itemtype-user .list-itemtype-track{font-size:.9rem}.list-itemtype-ticket h2{font-size:1rem}.list-itemtype-project h2,.list-itemtype-user h2,.loader p{font-size:1.2rem}.list-itemtype-project p,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{font-family:opensans-regular,Arial,Helvetica,sans-serif}.list-itemtype-project{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-project h2,.list-itemtype-project p{margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-project-members,.list-itemtype-project .list-itemtype-project-tags{-webkit-align-self:flex-end;-ms-flex-item-align:end;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .list-itemtype-project-members{align-self:flex-end;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-project .list-itemtype-project-tags{align-self:flex-end;display:flex;-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5rem}.list-itemtype-project .tag{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket h2,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user h2,.list-itemtype-user p{margin-bottom:0}.list-itemtype-ticket,.list-itemtype-timeline,.list-itemtype-user{border-bottom:1px solid #f5f5f5;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user,.list-itemtype-user .list-itemtype-track{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-ticket .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .list-itemtype-avatar img{width:100%}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-project{color:#bdbdbd}.list-itemtype-ticket .list-itemtype-ticket-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-id{color:#bdbdbd;margin-right:.3rem}.list-itemtype-user{display:flex}.list-itemtype-user .list-itemtype-track{color:#bdbdbd;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-user .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .list-itemtype-avatar img{width:100%}.list-itemtype-user .extra-info{margin-top:.25rem}.list-itemtype-timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-timeline .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-timeline .list-itemtype-track-likers,.list-itemtype-timeline .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track-likers .icon,.list-itemtype-timeline .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-timeline .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-timeline .list-itemtype-track-likers.active,.list-itemtype-timeline .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-timeline h2{margin-bottom:0}.admin-menu li,.empty-backlog .title,.empty-burndown .title,.sprints-empty .title,.taskboard-table-header .task-colum-name,.ticket-data .ticket-title,.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,tg-project-menu{text-transform:uppercase}.list-itemtype-timeline .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.loader p{color:#757575;text-align:center}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar,.notification-light{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.loading-bar{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:loadBar;animation-name:loadBar;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;background:#757575;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{-webkit-animation-delay:0s;animation-delay:0s;background:#ffc107}.loading-bar .item-1{-webkit-animation-delay:1s;animation-delay:1s;background:#009688}.loading-bar .item-2{-webkit-animation-delay:2s;animation-delay:2s;background:#e91e63}.loading-bar .item-3{-webkit-animation-delay:3s;animation-delay:3s;background:#9c27b0}.loading-bar .item-4{-webkit-animation-delay:4s;animation-delay:4s;background:#cddc39}.loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}a.help-button,a.help-markdown{font-size:.9rem;color:#bdbdbd}a.help-button:hover span,a.help-markdown:hover span{color:#424242;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button:hover .icon,a.help-markdown:hover .icon{color:#8c9eff;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button .icon,a.help-markdown .icon{color:#bdbdbd;margin-right:.2rem}.markItUpHeader ul{background:#f5f5f5;padding:.3rem}.markItUpHeader ul li{display:inline-block;float:none}.markItUpHeader ul li a{opacity:.8}.markItUpHeader ul li a:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.markItUpHeader ul .preview-icon{position:absolute;right:2.5rem}.markItUpContainer{padding:0}.markdown{position:relative}.preview .actions{background:#f5f5f5;margin-top:.5rem;min-height:2rem;padding:.3rem}.notification-light p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.notification-message-success .warning{font-size:1.2rem;color:#fff;line-height:1.2}.notification-message-error .warning{font-size:2rem;color:#fff;line-height:2.4rem}.notification-message-error .icon-notification-error{font-size:3rem;display:inline;vertical-align:sub}.notification-message-error .warning,.notification-message-success .warning{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.notification-message-success{background:rgba(140,158,255,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);opacity:1;right:-370px;top:2%;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{-webkit-animation:animSlide 2s linear both;animation:animSlide 2s linear both;opacity:1}.notification-message-success p{margin:0}@-webkit-keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-light,.notification-message-error{-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%)}.notification-message-error{background:rgba(244,67,54,.9);top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error.inactive{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-light p,.notification-message-error .text p{margin:0}.notification-message-error .icon-delete{color:#fff;position:absolute;right:1rem;top:1rem}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(189,189,189,.95);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;padding:1rem;position:absolute;top:0;transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s;width:100%;z-index:99999}.paginator ul,.summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.notification-light.inactive{opacity:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s}.notification-light.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s;transition:all .6s}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{margin-right:1rem;width:2rem}.notification-light .close path{fill:#fff}.notification-message-light-error{background:rgba(244,67,54,.8)}.paginator{margin:2rem 0}.paginator ul{display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator .dots,.paginator a{background:#bdbdbd;color:#fff;padding:.5rem 1rem;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator a:hover{background:#212121;color:#fff;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .active span{background:#8c9eff}.paginator .dots{background:0 0;color:#bdbdbd}.v-pagination-list{overflow:hidden}.v-pagination-next,.v-pagination-previous{background-color:#757575;color:#f5f5f5;display:block;padding:.1rem 0;text-align:center;visibility:hidden;width:100%}.select-color,.select-color:after{background:#212121;position:absolute}.v-pagination-next:hover,.v-pagination-previous:hover{background-color:#212121;-webkit-transition:background .3s linear;transition:background .3s linear}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.private{display:inline-block;margin-left:.5rem;width:.5rem}.private svg{height:.5rem;width:.5rem}.private path{fill:#bdbdbd;-webkit-transition:fill .3s linear;transition:fill .3s linear}.select-color,.select-color a{font-size:.9rem}.select-color input{font-size:1rem}.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;border-radius:0 10px 10px 0;padding:15px}.select-color a{border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#8c9eff;-webkit-transition:color .3s linear;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#bdbdbd;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background-color:#f5f5f5;width:243px}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#bdbdbd;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary .description{font-size:.9rem}.empty-burndown .title{font-size:1.2rem}.empty-burndown,.empty-burndown .title,.summary .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.empty-burndown a,.summary .number{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.summary{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;padding:1em}.summary .summary-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#8c9eff}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{line-height:1}.summary .stats{cursor:pointer;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .color-line,.summary .stats:hover .graph{fill:#8c9eff;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats.active .color-line,.summary .stats.active .white-line{display:none}.summary .stats.active .graph{fill:#3f51b5}.summary .stats svg{height:100%;width:100%}.summary .stats .color-line,.summary .stats .graph{fill:#8a8a8a;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats .white-line{fill:#424242}.summary .stats .color-line,.summary .stats .white-line{display:block}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#8c9eff;height:24px}.summary-progress-bar .defined-points{background:#ff5252;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#8c9eff;height:24px;position:absolute}.large-summary{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.large-summary .large-summary-wrapper{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.large-summary .summary-progress-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.empty-burndown,.taskboard-task .taskboard-tagline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.large-summary .summary-progress-bar{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats-divider{margin-right:2rem}.large-summary .icon{font-size:1.4rem;margin-right:.4rem}.large-summary .icon.icon-stats{color:#3f51b5;float:right;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#8c9eff;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#8c9eff}.large-summary .icon.icon-stats.active:hover{color:#3f51b5;-webkit-transition:color .3s linear;transition:color .3s linear}.empty-burndown{-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;background:rgba(26,35,126,.15);display:flex;-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;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{-webkit-flex-basis:5rem;-ms-flex-preferred-size:5rem;flex-basis:5rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;width:5rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.empty-burndown .title{color:#1a237e;margin:0}.empty-burndown path{fill:#1a237e}.empty-burndown a{-webkit-animation:blink 2s infinite;animation:blink 2s infinite}.graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.wysiwyg,.wysiwyg .codehilite{overflow:auto}.graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;-webkit-transition:none;transition:none}.tag,.tags-block .add-tag-text,.tags-block .tag{font-size:.9rem}.tags-block .icon-plus{font-size:1.2rem}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-radius:0 5px 5px 0;color:#424242;display:inline-block;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.tag .icon-delete{color:#bdbdbd;margin-left:1rem}.tag .icon-delete:hover{color:#f44336}.ui-autocomplete{background:#fff;border:1px solid #bdbdbd;z-index:99910}.ui-autocomplete .ui-state-focus{background:#8c9eff}.ui-autocomplete li{cursor:pointer}.ui-helper-hidden-accessible{display:none}.tags-block .tags-container{display:inline-block}.tags-block input{padding:.4rem;width:14rem}.tags-block .tag{margin:0 .5rem .5rem 0;padding:.5rem}.tags-block .add-tag{color:#bdbdbd}.tags-block .add-tag:hover{color:#8c9eff}.taskboard-task .task-assigned,.taskboard-task .taskboard-text,.taskboard-task .taskboard-user-avatar a{font-size:.9rem}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit,.taskboard-task .icon-iocaine{font-size:1.2rem}.taskboard-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.taskboard-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.taskboard-task:hover .icon-drag-h,.taskboard-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.taskboard-task.ui-sortable-placeholder{background:#424242}.taskboard-task.blocked{background:#f44336;border:1px solid #ea1c0d;color:#fff}.taskboard-task.blocked a,.taskboard-task.blocked span,.taskboard-task.blocked:hover .icon-drag-h,.taskboard-task.blocked:hover .icon-edit{color:#fff}.taskboard-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.taskboard-task .taskboard-tagline{border-color:#f1e8cd;display:flex;height:.6rem}.taskboard-task .taskboard-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.taskboard-task .taskboard-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.taskboard-task .taskboard-user-avatar{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:55px}.taskboard-task .taskboard-user-avatar a{display:block;text-align:center}.taskboard-task .taskboard-user-avatar img{margin:0 auto}.taskboard-task .taskboard-user-avatar img:hover{border:2px solid #3f51b5;-webkit-transition:border .3s linear;transition:border .3s linear}.taskboard-task .iocaine img{-webkit-filter:hue-rotate(150deg) saturate(200%);filter:hue-rotate(150deg) saturate(200%)}.taskboard-task .icon-iocaine{background:#000;border-radius:5px;color:#fff;left:.2rem;padding:.1rem;position:absolute;top:1rem}.taskboard-task .task-assigned{color:#cfc29b;display:block}.taskboard-task .task-assigned:hover{color:#3f51b5}.taskboard-task .task-num{color:#424242;margin-right:.5em}.taskboard-task .taskboard-text{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;padding:0 .5rem 0 1rem;word-wrap:break-word}.taskboard-task .icon{-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task .loading{bottom:.5rem;position:absolute}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit{bottom:.5rem;color:#f1e8cd;opacity:0;position:absolute}.taskboard-task .icon-drag-h:hover,.taskboard-task .icon-edit:hover{color:#cfc29b}.taskboard-task .icon-edit,.taskboard-task .loading{right:1rem}.taskboard-task .icon-drag-h{font-size:2rem;cursor:move;right:45%}.task-drag{box-shadow:1px 1px 15px 6px rgba(0,0,0,.1)}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.track-button .track-inner{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border-radius:4px 0 0 4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;margin-right:.1rem;min-width:140px}.track-button .track-button-counter,.watch-options a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.track-button .track-inner:hover{background:#e8e8e8;-webkit-transition:background .3s;transition:background .3s}.track-button .track-inner span{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.track-button .track-inner .icon-arrow-up{margin-left:auto;padding:0 .5rem;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.track-button:hover{color:#212121}.track-button.active .track-inner{background:rgba(140,158,255,.2)}.track-button.active .track-icon path{fill:#3f51b5}.track-button.watch-container{margin-right:1rem;position:relative}.track-button .track-icon{padding:.3rem .6rem .3rem .75rem}.track-button .track-icon svg{height:1.1rem;position:relative;top:2px;width:1.1rem}.track-button .track-icon path{fill:#424242}.track-button .track-button-counter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-width:2rem}.like-button.active.is-hover .track-inner,.watch-button.active.is-hover .track-inner{background:#f44336;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.like-button.active.is-hover path,.watch-button.active.is-hover path{fill:#ff5252}.watch-options{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.admin-project-export-result .spin img,.ticket-assigned-to .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.watch-options li{margin:0}.assigned-to-list,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid rgba(189,189,189,.3);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.watch-options a.active{color:#8c9eff}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check path{fill:#8c9eff}.upvote-btn{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#bdbdbd;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#1a237e;-webkit-transition:background .3s;transition:background .3s}.upvote-btn a:hover path{fill:#1a237e}.upvote-btn a.active{background:rgba(140,158,255,.2);color:#3f51b5;-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.active path{fill:#3f51b5}.upvote-btn a.is-hover{background:#f44336;color:#f5f5f5}.upvote-btn a.is-hover svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover path{fill:#ff5252}.upvote-btn svg{height:1rem;width:1rem}.upvote-btn span{display:block}.upvote-btn path{fill:#bdbdbd}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#424242;margin-left:.5rem}.assigned-to-list .user-list-single,.ticket-watchers .user-list-single{-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;background:0 0;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem .5rem .3rem;vertical-align:middle}.assigned-to-list .user-list-single:last-child,.ticket-watchers .user-list-single:last-child{border:0}.assigned-to-list .user-list-avatar,.ticket-watchers .user-list-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.assigned-to-list .user-list-single:hover{background:#fff;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{background:#fff;cursor:pointer;margin-bottom:1rem;position:relative;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.1s;transition-delay:.1s}.assigned-to-list .user-list-single.is-active .icon-delete{opacity:1;position:absolute;right:1rem;top:1.3rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-single:hover .icon-delete{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.ticket-watchers .icon-delete{opacity:0;position:absolute;right:.5rem;top:0;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.ticket-watchers .icon-delete:hover{color:#f44336;-webkit-transition:color .3s ease-in;transition:color .3s ease-in}.wysiwyg code,.wysiwyg pre{font-size:.9rem}.wysiwyg h2{font-size:1.2rem;margin-bottom:.5rem}.wysiwyg h1{font-size:2rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.wysiwyg h2,.wysiwyg h3{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.wysiwyg{line-height:1.4rem;padding:1rem}.wysiwyg h1{line-height:2.5rem}.wysiwyg ol,.wysiwyg ul{list-style-position:outside;margin-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#3f51b5}.wysiwyg a:hover{color:#8c9eff}.wysiwyg p{line-height:1.4rem;margin-bottom:1rem}.wysiwyg code,.wysiwyg pre{background:#5c5c5c;color:#f5f5f5;direction:ltr;font-family:'courier new',monospace;margin-bottom:1rem;overflow:auto;unicode-bidi:embed;white-space:pre}.admin-functionalities .functionality .title,.admin-membership-table .avatar .name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-membership-table .avatar figcaption span,.admin-submenu ul a span,.admin-submenu-roles .single-role,.admin-webhooks .webhook-url span,.custom-fields-table .custom-description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wysiwyg pre{line-height:1.4rem;padding:.5rem}.wysiwyg table{border:1px solid #bdbdbd;margin-bottom:1rem}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#bdbdbd 1px solid}.wysiwyg th{border-right:#bdbdbd 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#bdbdbd 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#b8b8b8;margin-bottom:2rem}.admin-common .total{font-size:1.2rem;background-color:#f5f5f5;color:#444;padding:.3rem 1rem}.admin-common .total:hover .edit-value{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0;padding:.5rem 0}.custom-fields-table .table-header{border-bottom:3px solid #f5f5f5}.custom-fields-table .table-header .custom-description span,.custom-fields-table .table-header .custom-name span{padding-left:1.1rem}.custom-fields-table .table-body form:last-child .row{border:0}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;-webkit-transition:background .2s linear;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag-v{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .table-body .custom-description{color:#b8b8b8}.custom-fields-table .single-custom-field{border-bottom:1px solid #f5f5f5;color:#555}.custom-fields-table .icon-drag-v{color:#b8b8b8;opacity:0;padding:0 .1rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .icon-drag-v:hover{color:#555;cursor:move;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{color:#555;margin-right:.5rem}.custom-fields-table .custom-name{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-description{max-width:100%;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.custom-fields-table .custom-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-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;opacity:0;text-align:center}.custom-fields-table .custom-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-fields-table form .custom-options-wrapper{opacity:1}.admin-functionalities form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.admin-functionalities .functionality{-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;background-color:#f5f5f5;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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.3rem;margin-right:.3rem;opacity:.5;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:top;width:32%}.admin-functionalities .functionality.active{background-color:rgba(114,161,20,.3);opacity:1}.admin-functionalities .functionality .icon{font-size:3rem;-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;margin:0 auto;min-width:60px}.admin-functionalities .functionality .desc{text-align:center;width:100%}.admin-functionalities .functionality .activate-input{display:none}.admin-functionalities .functionality .activate-input+label{color:#fff;cursor:pointer;display:block;text-align:center}.admin-functionalities .functionality .title{display:block}.admin-functionalities .functionality select{margin-top:1rem}.admin-functionalities .videoconference-attributes select{margin-bottom:.5rem}.admin-functionalities .button-green{color:#fff;display:block;text-align:center}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.admin-membership-table .avatar figcaption{margin-left:1rem;width:75%}.admin-membership-table .avatar figcaption span{width:100%}.admin-membership-table .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:35px}.admin-membership-table .avatar .email,.admin-membership-table .avatar .name{display:block;width:100%}.admin-membership-table .avatar .email{color:#b8b8b8}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#f5f5f5}.admin-membership-table .resend{background-color:#72a114;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;-webkit-transition:background-color .3s linear;transition:background-color .3s linear}.admin-membership-table .delete{font-size:1.2rem;color:#b8b8b8}.admin-membership-table .delete:hover{color:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.admin-menu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #dcdcdc}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-result .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{width:100%}.admin-project-export-result h3{font-size:1.2rem;font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#b8b8b8;margin:.5rem 0;text-align:center}.project-details .privacy-settings label,.project-details input,.project-details label,.project-details textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.project-details form{max-width:700px;width:100%}.project-details fieldset{margin-bottom:1rem}.project-details label{display:block;margin-bottom:.2rem}.project-details textarea{height:10rem}.project-details .privacy-settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.project-details .privacy-settings>div{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;position:relative}.project-details .privacy-settings>div:first-child{margin-right:.5rem}.project-details .privacy-settings label{border:1px solid #b8b8b8;cursor:not-allowed;display:block;text-align:center;-webkit-transition:all .2s linear;transition:all .2s linear}.project-details .privacy-settings label span{color:#b8b8b8}.project-details .privacy-project{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.project-details .privacy-project:checked+label{background:#9dce0a;border:1px solid #9dce0a}.project-details .privacy-project:checked+label span{color:#fff}.project-details .button-green{color:#fff;display:block;text-align:center}.project-details .delete-project{font-size:.9rem;display:block;margin-top:1rem}.admin-roles .general-category{font-size:.9rem}.admin-roles .edit-value{font-size:1rem}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-roles .edit-value{color:#b8b8b8;cursor:pointer;margin-left:.5rem;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-roles .edit-role{background-color:#f5f5f5;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .edit-role .icon-floppy{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .edit-role .icon-floppy:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;display:inline-block}.admin-submenu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.admin-contrib .help .alt-image,.admin-contrib .help code,.admin-contrib .select-input-text .help-copy,.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-body span,.admin-webhooks .history-single-response-header a{font-size:.9rem}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a span{display:block;max-width:85%}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child,.admin-webhooks .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body .response-container,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-webhooks .table-header{border-bottom:1px solid #b8b8b8}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #f5f5f5}.admin-webhooks .webhooks-options{margin-bottom:1rem;text-align:right}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.admin-webhooks .webhook-url{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.admin-webhooks .webhook-url span{max-width:65%;color:#b8b8b8;display:inline-block;vertical-align:middle}.admin-contrib .help code,.admin-third-parties .help code{direction:ltr;line-height:1.4rem;unicode-bidi:embed;white-space:pre}.admin-webhooks .webhook-url a{color:#72a114;margin-left:.5rem}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;min-width:100px;text-align:center}.admin-webhooks .webhook-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.admin-webhooks .webhook-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .webhooks-history.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #f5f5f5;margin-left:22%}.admin-webhooks .history-single{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header a,.admin-webhooks .history-single-response-header span:first-child{color:#b8b8b8}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{-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;background:#f5f5f5;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-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.backlog-table-body,.backlog-table-header,.kanban-table,.taskboard-table,.wiki-summary .wiki-user-modification{-webkit-box-orient:vertical;-webkit-box-direction:normal}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{color:#b8b8b8;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{border:0;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib h2,.admin-contrib label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.admin-contrib .help h3,.admin-contrib .help ol span{font-family:opensans-semibold}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #f5f5f5;margin-bottom:1rem;padding-bottom:1rem}.admin-contrib .contrib-input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.admin-contrib .contrib-test{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:7.5rem;-ms-flex-preferred-size:7.5rem;flex-basis:7.5rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-left:.5rem;text-align:center}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .contrib-form-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-contrib .select-input-text .help-copy{opacity:0}.admin-contrib .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-contrib .check-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0}.admin-contrib .help{margin-top:2rem}.admin-contrib .help h3{margin-bottom:1rem}.admin-contrib .help ol{padding:0 0 0 2rem}.admin-contrib .help .img{margin-bottom:1rem}.admin-contrib .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-contrib .help .code-info{padding-left:1rem}.admin-contrib .help .code-info li{margin-bottom:.5rem}.admin-contrib .help .code-info span{font-family:opensans-semibold}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv .csv-regenerate-field a{font-size:.9rem;min-width:110px}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field .icon{margin-right:.3rem}.project-csv .field-with-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:1rem;width:100%}.project-csv .field-with-options input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row .icon,.project-values-settings a{font-size:1.2rem}.admin-third-parties .help .alt-image,.admin-third-parties .help code,.admin-third-parties .select-input-text .help-copy,.backlog-table-body .doom-line span,.backlog-table-body .pop-points,.backlog-table-body .pop-points a,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open a,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-body .pop-role,.backlog-table-body .pop-role a,.backlog-table-body .pop-status,.backlog-table-body .pop-status a,.backlog-table-body .row,.backlog-table-body .tags-block .tag,.backlog-table-header .pop-points,.backlog-table-header .pop-points a,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open a,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom a,.backlog-table-header .pop-role,.backlog-table-header .pop-role a,.backlog-table-header .pop-status,.backlog-table-header .pop-status a,.backlog-table-header .row,.login-form-container .forgot-pass,.register-form-container .register-text{font-size:.9rem}.project-values-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{color:#b8b8b8;opacity:0}.project-values-row .icon:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.project-values-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #f5f5f5}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-header .points,.login-form-container .remember-me+label{cursor:pointer}.project-values-body .project-values-row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.project-values-name{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.project-values-value{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{color:#555;margin-right:.5rem}.project-values-settings a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.project-values-settings a:hover .icon-delete{color:red}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.admin-third-parties .help h3,.admin-third-parties .help ol span{font-family:opensans-semibold}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p,.change-password-text{color:#444;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-third-parties .help{margin-top:2rem}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties .help h3{margin-bottom:1rem}.admin-third-parties .help ol{padding:0 0 0 2rem}.admin-third-parties .help .img{margin-bottom:1rem}.admin-third-parties .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-third-parties .help .code-info li,.cancel-account p{margin-bottom:.5rem}.admin-third-parties .help .code-info{padding-left:1rem}.admin-third-parties .help .code-info span{font-family:opensans-semibold}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-email-form p{margin-bottom:.5rem}.change-password-form-container .token-change-password{position:relative}.change-password-form-container input:focus+.get-token{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.change-password-form-container .get-token{font-size:.9rem;color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.change-password-form-container .get-token:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.login-form-container .forgot-pass{color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;-webkit-transition:all .3s linear;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.login-form-container .remember-me{vertical-align:top}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin-bottom:1rem;text-align:center}.backlog-table-header .backlog-table-title{font-size:1rem}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a,.empty-backlog .title{font-size:1.2rem}.backlog-table-body .doom-line span{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.backlog-table-body .pop-points,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-body .user-story-name a,.backlog-table-header .pop-points,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-role,.backlog-table-header .pop-status,.empty-backlog{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.backlog-table-body,.backlog-table-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-subtitle:hover,.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-subtitle:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-subtitle .input,.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-subtitle .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-webkit-flex-basis:25px;-ms-flex-preferred-size:25px;flex-basis:25px;-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}.backlog-table-body .backlog-table-subtitle .votes,.backlog-table-body .backlog-table-title .votes,.backlog-table-body .row .votes,.backlog-table-header .backlog-table-subtitle .votes,.backlog-table-header .backlog-table-title .votes,.backlog-table-header .row .votes{color:#555;-webkit-flex-basis:65px;-ms-flex-preferred-size:65px;flex-basis:65px;-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-align:center}.backlog-table-body .backlog-table-subtitle .votes.inactive,.backlog-table-body .backlog-table-title .votes.inactive,.backlog-table-body .row .votes.inactive,.backlog-table-header .backlog-table-subtitle .votes.inactive,.backlog-table-header .backlog-table-title .votes.inactive,.backlog-table-header .row .votes.inactive{color:#b8b8b8}.backlog-table-body .backlog-table-subtitle .votes.is-voted,.backlog-table-body .backlog-table-title .votes.is-voted,.backlog-table-body .row .votes.is-voted,.backlog-table-header .backlog-table-subtitle .votes.is-voted,.backlog-table-header .backlog-table-title .votes.is-voted,.backlog-table-header .row .votes.is-voted{color:#9dce0a}.backlog-table-body .backlog-table-subtitle .user-stories,.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-subtitle .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{overflow:hidden;width:100%}.backlog-table-body .backlog-table-subtitle .status,.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-subtitle .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-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}.backlog-table-body .backlog-table-subtitle .points,.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-subtitle .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-webkit-flex-basis:125px;-ms-flex-preferred-size:125px;flex-basis:125px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point,.empty-backlog,.sprints .loading,.sprints .sprint-table .sprint-empty{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{color:#b8b8b8;margin-left:.2rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px 3rem 10px 10px;position:absolute;width:150px;z-index:99}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{background:#050505;bottom:0;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:auto;width:200px;z-index:99}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .user-story-name,.sprints .sprint-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:opensans-regular,Arial,Helvetica,sans-serif;border-bottom:2px solid #b8b8b8;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:30px}.backlog-table-header .header-points span{color:#b8b8b8}.backlog-table-body .row{border-bottom:1px solid #ebebeb;cursor:move;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in;-webkit-transition-delay:.2s;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag-v,.backlog-table-body .row:hover .us-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .is-checked,.backlog-table-body .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.backlog-table-body .user-story-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .doom-line{background:red;margin:.2rem 0;padding:.6rem 0;position:relative;width:100%}.backlog-table-body .doom-line span{color:#fff;position:absolute;right:.5rem;top:-3px}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in;width:30px}.backlog-table-body .icon-drag-v:hover,.backlog-table-body .us-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .us-settings{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 0 0 2rem;opacity:0}.backlog-table-body .icon-drag-v{cursor:move;opacity:0;padding:.1rem .5rem 0 0}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.empty-backlog{padding:2rem}.empty-backlog img{margin-bottom:1rem}.empty-backlog .title{margin-bottom:.5rem}.empty-backlog a{color:#72a114}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint .description{font-size:.75rem}.sprints .filter-closed-sprints,.sprints .sprint-table .column-us,.sprints .us-item-row .user-story-name{font-size:.9rem}.sprints .sprint .number,.sprints .sprint .sprint-date,.sprints .sprint-name a,.sprints-empty .title{font-size:1.2rem}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint-header{-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;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#72a114;padding:.25rem .25rem 0;-webkit-transition:background .2s;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{height:1.4rem;width:1.5rem}.sprints .add-sprint path{fill:#f5f5f5}.sprints .filter-closed-sprints{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading-spinner{border:0;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.sprints .sprint-name a{max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;margin-right:3px}.sprints .sprint{margin-bottom:2rem;overflow:hidden}.sprints .sprint header{position:relative}.sprints .sprint:hover .icon-edit{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.sprints .sprint .icon{display:inline-block}.sprints .sprint .icon-arrow-up{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:baseline}.sprints .sprint .icon-arrow-up.active{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.sprints .sprint .icon-arrow-up:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.sprints .sprint .icon-edit{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;vertical-align:baseline}.sprints .sprint .icon-edit:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.sprints .sprint .description{line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{color:#b8b8b8;-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1}.sprints .sprint .sprint-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.sprints .sprint ul{margin:0}.sprints .sprint li{display:inline-block}.sprints .sprint li:first-child{margin-right:3px}.sprints .sprint-progress-bar{background:#b8b8b8;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#72a114;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table .sprint-empty{background:#e6e6e6;border:2px dashed #d2d2d2;color:#555;padding:1rem}.sprints .sprint-table .row{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:#d7d7d7;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .row.readonly,.taskboard-table .taskboard-task.readonly{cursor:auto}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.sortable-placeholder{background:#d7d7d7;height:40px}.sprints .sprint-table .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .column-us{-webkit-flex-flow:3;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.sprints .sprint-table .us-name.closed{color:#c5c5c5}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#c5c5c5}.sprints .sprint-table .column-points.blocked{color:red}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .icon-drag-v,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input,.taskboard-table-body .column-fold .taskboard-task .icon,.taskboard-table-body .column-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .column-fold .taskboard-task .taskboard-text,.taskboard-table-body .row-fold .taskboard-task .icon,.taskboard-table-body .row-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .row-fold .taskboard-task .taskboard-text{display:none}.sprints .us-item-row .user-story-name{line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#b8b8b8}.sprints-empty a,.taskboard-table-header .task-colum-name .icon:hover{color:#72a114}.sprint-closed .sprint-progress-bar .current-progress{background:#9f9f9f}.sprint-closed .button-gray{background:#b8b8b8}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{margin-bottom:.5rem}.taskboard-userstory-box .points-value{font-size:.9rem}.taskboard-table-header .task-colum-name .icon{font-size:1rem}.taskboard-table-header .task-colum-name,.taskboard-userstory-box .us-title{font-size:1.2rem}.taskboard-table-body .column-fold .taskboard-task,.taskboard-table-body .row-fold .taskboard-task{background:0 0;border:0;margin:0;min-height:0}.taskboard-table-body .column-fold .taskboard-task .taskboard-task-inner,.taskboard-table-body .row-fold .taskboard-task .taskboard-task-inner{padding:.2rem}.taskboard-table-body .column-fold .taskboard-task .avatar,.taskboard-table-body .row-fold .taskboard-task .avatar{height:35px;width:35px}.taskboard-table-body .column-fold .taskboard-task.ui-sortable-helper,.taskboard-table-body .row-fold .taskboard-task.ui-sortable-helper{box-shadow:none}.taskboard-table-body .column-fold .task-column,.taskboard-table-body .row-fold .task-column,.taskboard-table-body .task-column.column-fold,.taskboard-table-body .task-column.row-fold{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;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-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link,.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table,.taskboard-table-header .taskboard-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;overflow:hidden}.taskboard-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%}.taskboard-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:flex;position:absolute}.taskboard-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;width:300px}.taskboard-table-header .task-colum-name:last-child{margin-right:0}.taskboard-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-header .task-colum-name .icon.hfold,.taskboard-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.taskboard-table-header .task-colum-name.column-fold{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table-header .task-colum-name.column-fold span{display:none}.taskboard-table-header .task-colum-name.column-fold .hfold,.taskboard-table-header .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table-body{height:100%;overflow:auto;width:100%}.taskboard-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 10px 0 0;max-width:300px;width:300px}.taskboard-table-body .task-column:last-child{margin-right:0}.taskboard-table-body .column-fold .taskboard-task{max-width:40px;width:40px}.taskboard-table-body .task-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;min-height:10rem;width:100%}.taskboard-table-body .avatar-task-link,.taskboard-table-body .task-row.row-fold .icon-bulk,.taskboard-table-body .task-row.row-fold .icon-plus,.taskboard-table-body .task-row.row-fold .points-value{display:none}.taskboard-table-body .task-row:hover .new-task{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.taskboard-table-body .task-row.blocked .taskboard-userstory-box{background:rgba(255,0,0,.6)}.taskboard-table-body .task-row.blocked .points-value,.taskboard-table-body .task-row.blocked .points-value:hover,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a:hover{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.taskboard-table-body .task-row.blocked .taskboard-tasks-box{background:rgba(255,0,0,.1)}.taskboard-table-body .task-row.row-fold{min-height:0}.taskboard-table-body .task-row.row-fold .us-title{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskboard-table-body .taskboard-userstory-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-table-body .taskboard-userstory-box .icon{color:#b8b8b8;position:absolute;right:.5rem;top:.7rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-body .taskboard-userstory-box .icon:hover{color:#72a114}.taskboard-table-body .taskboard-userstory-box .icon.icon-plus{right:2rem}.taskboard-table-body .taskboard-userstory-box .icon.icon-vfold,.taskboard-table-body .taskboard-userstory-box .icon.icon-vunfold{left:0;right:inherit}.taskboard-table-body .avatar-assigned-to{display:block}.taskboard-userstory-box{position:relative}.taskboard-userstory-box .tag-list{display:none;margin-bottom:1rem}.attachments-header,.ticket-assigned-to{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.taskboard-userstory-box .us-title{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-userstory-box .points-value{color:#b8b8b8}.taskboard-userstory-box .points-value span{margin-right:.1rem}.points-list a{color:#72a114;margin-left:.5rem}.points-list a:hover span{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.points-list span{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem}.ticket-assigned-to{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;margin-bottom:1rem;position:relative}.ticket-assigned-to:hover .assigned-to .icon-delete{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;margin:1rem auto;max-height:2rem;max-width:2rem}.attachments,.duty-custom-fields{margin-bottom:2rem}.ticket-assigned-to .user-avatar{-webkit-flex-basis:4rem;-ms-flex-preferred-size:4rem;flex-basis:4rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .assigned-to{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.attachments-header .attachments-title,.colors-table .table-header,.single-attachment .attachment-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.ticket-assigned-to .assigned-to .user-assigned{font-size:1.2rem;color:#72a114;cursor:default;line-height:1.5rem}.ticket-assigned-to .assigned-to .user-assigned.editable{cursor:pointer}.ticket-assigned-to .assigned-to .user-assigned .icon{vertical-align:middle}.ticket-assigned-to .assigned-to .assigned-name{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ticket-assigned-to .assigned-to .icon-delete{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0}.ticket-assigned-to .assigned-to .icon-delete:hover{color:red}.add-attach span,.more-attachments,.single-attachment,.single-attachment .editable-attachment-comment{font-size:.9rem}.attachments-header .attachments-title{font-size:1rem;color:#444}.attachments-header .icon,.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings,.single-attachment .icon-delete{font-size:1.2rem}.attachments-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.attachments-header .attachments-num,.attachments-header .attachments-text{margin-right:.1rem}.attachments-header .icon{color:#444;cursor:pointer}.attachments-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.single-attachment{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem 1rem;position:relative}.category-config,.more-attachments{border-bottom:1px solid #b8b8b8}.single-attachment:hover .attachment-settings .settings{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.single-attachment.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.single-attachment.deprecated,.single-attachment.deprecated .attachment-name a{color:#b8b8b8}.single-attachment.sortable-placeholder{background:#f5f5f5;height:40px}.single-attachment .attachment-name{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:1rem}.single-attachment .attachment-name .icon{margin-right:.5rem}.single-attachment .attachment-size{color:#b8b8b8;-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem}.single-attachment .attachment-comments,.single-attachment .editable-attachment-comment{-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-comments span,.single-attachment .editable-attachment-comment span{color:#555}.single-attachment .attachment-settings{-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings{color:#b8b8b8;display:block;position:absolute}.single-attachment .attachment-settings .editable-settings:hover,.single-attachment .attachment-settings .settings:hover{color:#72a114}.single-attachment .attachment-settings .settings{opacity:0;top:.5rem}.single-attachment .attachment-settings .editable-settings{opacity:1;top:1rem}.single-attachment .attachment-settings .icon-edit,.single-attachment .attachment-settings .icon-floppy{right:3.5rem}.single-attachment .attachment-settings .icon-delete{right:2rem}.single-attachment .attachment-settings .icon-delete:hover{color:red}.single-attachment .attachment-settings .icon-drag-v{cursor:move;right:0}.single-attachment .icon-delete{color:#b8b8b8}.single-attachment .icon-delete:hover{color:red}.single-attachment .editable-attachment-deprecated{padding-left:1rem}.single-attachment .editable-attachment-deprecated span{color:#b8b8b8}.single-attachment .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.single-attachment .editable-attachment-deprecated input:checked+span{color:#444}.single-attachment .percentage{background:rgba(114,161,20,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.more-attachments{display:block;padding:1rem 0 1rem 1rem}.more-attachments span{color:#b8b8b8}.more-attachments .more-attachments-num{color:#72a114;margin-left:.5rem}.more-attachments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.add-attach{cursor:pointer;overflow:hidden;position:relative}.add-attach input{display:none}.category-config .category-item,.category-config .resume{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.add-attach span{color:#b8b8b8}.attachment-preview img{max-height:95vh;max-width:95vw}.category-config:first-child{border-top:1px solid #b8b8b8}.category-config .resume{-webkit-box-align:space-between;-webkit-align-items:space-between;-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:flex;padding:1rem;position:relative}.category-config .resume-title{width:280px}.category-config .count{color:#b8b8b8;float:left;padding-right:5px}.category-config .summary-role{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#b8b8b8;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#72a114}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .icon{font-size:2rem;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-align:right}.category-config .category-items{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden;background-color:#f5f5f5;width:100%}.category-config .category-items.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.colors-table .row,.duty-custom-fields .custom-fields-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #f5f5f5}.colors-table .icon,.colors-table .icon-check-square{font-size:1.2rem}.colors-table .table-header:hover{background:0 0}.colors-table .table-header .row{padding-left:50px}.colors-table form:last-child .row{border:0}.colors-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.colors-table .row:last-child{border:0}.colors-table .row.edition .current-color{cursor:pointer}.colors-table .row.edition,.colors-table .row.new-value{padding-left:50px}.colors-table .row.hidden{display:none}.colors-table .row .color-column{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.colors-table .row .status-name{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px;position:relative}.colors-table .row .status-name span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.colors-table .row .status-slug{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:130px;text-align:center}.colors-table .row .status-wip-limit{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#b8b8b8;border-radius:2px;height:40px;width:40px}.activity-single .activity-user img,.duty-custom-fields form input{width:100%}.colors-table .icon{color:#b8b8b8;margin-right:1rem;opacity:0}.colors-table .icon.icon-check-square,.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.colors-table .icon:hover{color:#72a114;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.colors-table .icon-delete:hover{color:red}.colors-table .icon-check-square{color:#72a114}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom{font-size:1.2rem;cursor:pointer;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom.open{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-fields-body{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.duty-custom-fields .custom-fields-body.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.duty-custom-fields .custom-field-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-single .custom-field-options{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-custom-fields .custom-field-single .custom-field-options a{color:#b8b8b8}.duty-custom-fields .custom-field-single .custom-field-options a:hover{color:#72a114}.duty-custom-fields .custom-field-data{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{color:#888;display:block;line-height:.9rem}.duty-custom-fields .custom-field-options{margin:0}.duty-custom-fields .custom-field-value{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields form label{cursor:pointer}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#b8b8b8;margin-top:.5rem}.external-reference a{border-left:1px solid #b8b8b8;padding:0 .2rem;-webkit-transition:color .3s linear;transition:color .3s linear}.external-reference a:hover{color:#72a114}.external-reference a:first-child{border:0}.activity-single .comment-restore,.activity-single .date,.activity-single .deleted-comment,.activity-single.deleted-comment,.change-entry .activity-fromto,.more-activity,.more-comments,.show-more-comments{font-size:.9rem}.activity-single .deleted-comment .comment-body p,.activity-single.deleted-comment .comment-body p{font-size:1rem}.history-tabs{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.change-entry .activity-changed{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.history{margin-bottom:1rem}.changes-title{display:block;padding:.5rem}.changes-title:hover .icon{color:#72a114;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.changes-title .icon{color:#444;float:right;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:all .2s linear;transition:all .2s linear}.change-entry{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.change-entry:last-child{border-bottom:0}.change-entry .activity-changed,.change-entry .activity-fromto{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.history-tabs{border-bottom:3px solid #b8b8b8;margin-bottom:0;padding:.5rem 0}.history-tabs li{font-size:1.2rem;display:inline-block}.history-tabs li:first-child{border-right:1px solid #b8b8b8}.history-tabs a{color:#b8b8b8;padding:0 2rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs a.active{color:#444}.history-tabs a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs .icon{margin-right:.5rem}.add-comment:after{clear:both;content:'';display:table}.add-comment.active .button-green{display:block}.add-comment.active textarea{height:6rem;-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.add-comment.active .help-markdown{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.add-comment.active .preview-icon{opacity:1;position:absolute;right:1rem}.add-comment .help-markdown,.add-comment .preview-icon,.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave.ng-leave-active:last-child{opacity:0}.add-comment textarea{background:#fff;height:5rem;margin-bottom:.5rem;min-height:41px}.add-comment .save-comment{color:#fff;float:right}.add-comment .button-green{display:none}.more-comments,.show-more-comments{color:#b8b8b8;display:block;border-bottom:1px solid #b8b8b8}.add-comment .edit,.add-comment .preview-icon{position:absolute;right:1rem}.show-more-comments{border-top:1px solid #b8b8b8;padding:1rem 0 1rem 1rem}.show-more-comments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.more-comments{padding:1rem}.more-comments .prev-comments-num{color:#72a114;margin-left:.5rem}.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{-webkit-transition:all .3s ease-in;transition:all .3s ease-in}.comment-list.activeanimation .comment-single.ng-enter.ng-enter-active:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{opacity:1}.activity-single{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2rem 0;position:relative}.activity-single:hover .comment-delete,.activity-single:hover .comment-restore{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.activity-single:first-child{margin-top:0}.activity-single:last-child{border-bottom:0}.activity-single .deleted-comment,.activity-single.deleted-comment{color:#b8b8b8;padding:.5rem}.activity-single .deleted-comment a,.activity-single.deleted-comment a{color:#b8b8b8;margin-left:.3rem}.activity-single .deleted-comment a:hover,.activity-single.deleted-comment a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .deleted-comment img,.activity-single.deleted-comment img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:.5}.activity-single .deleted-comment .comment-body,.activity-single.deleted-comment .comment-body{display:none;margin:.2rem 0 .5rem}.activity-single .activity-username,.activity-single .username{margin-bottom:.5rem;color:#72a114}.activity-single .comment-restore{color:#b8b8b8;position:absolute;right:0;top:.4rem}.activity-single .comment-restore .icon{vertical-align:baseline}.activity-single .comment-restore:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .activity-user{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.activity-single .activity-content{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:calc(100% - 80px)}.activity-single .changes{background:#f5f5f5}.activity-single .changes .change-entry{display:none}.activity-single .changes .change-entry.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.activity-single .date{color:#b8b8b8;margin-left:1rem}.activity-single .wysiwyg{margin-bottom:0}.activity-single .comment-delete{color:red;opacity:0;position:absolute;right:0;top:2rem;-webkit-transition:all .2s linear;transition:all .2s linear}.activity-single .comment-delete:hover{color:#ff8282;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single.activity .change-entry{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.more-activity{border-bottom:1px solid #b8b8b8;color:#b8b8b8;display:block;padding:1rem}.more-activity .prev-activity-num{color:#72a114;margin-left:.5rem}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox-generic-form label{font-size:.75rem}.lightbox-add-member .help-text,.lightbox-delete-account .newsletter input+label,.lightbox-sprint-add-edit .delete-sprint,.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem}.lightbox-select-user .more-watchers{font-size:1rem}.lightbox-add-member .add-member-wrapper .icon-delete,.lightbox-add-member .icon,.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-size:1.2rem}.lightbox h2{font-size:1.6rem}.lightbox .close,.lightbox-add-member .icon-delete{font-size:2rem}.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress,.lightbox-select-user .more-watchers{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.lightbox h2,.lightbox-delete-account .newsletter input+label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.lightbox .close{color:#555;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.lightbox-add-member .add-member-wrapper fieldset,.lightbox-generic-form fieldset{position:relative}.lightbox .close:hover{color:#72a114}.open.lightbox{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.lightbox{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox-generic-loading .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.lightbox-generic-form form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form textarea{margin-bottom:1rem;max-height:9rem;min-height:7rem;resize:vertical}.lightbox-generic-form label{background:#f5f5f5;border:1px solid #b8b8b8;color:#444;cursor:pointer;display:block;padding:7px 30px;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form label:hover span{color:#fff}.lightbox-generic-form label span{color:#444;vertical-align:middle}.lightbox-generic-form .settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem}.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox-generic-form .settings fieldset:hover{color:#fff;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-add-member .button,.lightbox-add-member .extra-text{margin-top:1rem}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #72a114}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#72a114;border:1px solid #72a114;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-bulk form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-block textarea,.lightbox-create-issue textarea{min-height:8rem;max-height:12rem;margin-bottom:1rem}.lightbox-search form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-search fieldset{margin-bottom:1rem}.lightbox-add-member .add-member-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.lightbox-add-member .add-member-wrapper:last-child,.lightbox-add-member fieldset{margin-bottom:0}.lightbox-add-member .add-member-wrapper fieldset:first-child{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.lightbox-add-member .add-member-wrapper fieldset:last-child{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.lightbox-add-member select{width:80%}.lightbox-add-member .icon{margin-left:.5rem}.lightbox-add-member .icon-delete:hover{color:red}.lightbox-add-member .help-text{padding:.5rem 1rem}.lightbox-add-member .checksley-error-list{right:.5rem}.lightbox-add-member .checksley-error-list li{display:none}.lightbox-add-member .checksley-error-list li:first-child{display:block}.lightbox-sprint-add-edit form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint{color:#444;display:block;margin-top:1rem;text-align:right}.lightbox-sprint-add-edit .delete-sprint a{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-sprint-add-edit .delete-sprint a:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-generic-ask form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-account form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row,.related-tasks-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.lightbox-delete-project .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-webkit-flex-basis:500px;-ms-flex-preferred-size:500px;flex-basis:500px;-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;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{max-height:100%;max-width:100%;width:100%}.lightbox-generic-loading .progress-bar-wrapper{background:#e8e8e8;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;-webkit-transition:width .1s linear;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#e8e8e8;bottom:35px;color:#555;padding:.3rem;position:absolute;-webkit-transition:left .1s linear;transition:left .1s linear}.lightbox-create-issue form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:flex}.main-nav a,.main-nav span{display:block}.lightbox-create-issue .fieldset-row fieldset{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block .form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.lightbox-select-user .more-watchers{padding:.5rem;text-align:center}.lb-create-edit-userstory .ticket-role-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;max-width:calc(100% * (1/5) - .2rem)}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(5n+5){margin-right:0}.lb-create-edit-userstory .points-per-role{margin-bottom:1rem}.main-nav a:hover .helper{font-size:.9rem}.main-nav .item{font-size:1.2rem}tg-project-menu{background-position:0 -300px;min-height:calc(100vh - 40px);padding:1rem 0}.main-nav{list-style:none;padding:0;position:relative;text-align:center}.related-tasks-body .row,.related-tasks-body .status{text-align:left;position:relative}.main-nav a{color:#fff;padding:.75rem .8rem;position:relative}.main-nav a:hover{background:rgba(0,0,0,.2);color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.main-nav a:hover .helper{-webkit-animation:slideLeft .2s ease-in-out both;animation:slideLeft .2s ease-in-out both;background:-webkit-linear-gradient(left,#000 0,rgba(0,0,0,.8) 100%);background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;padding:.4rem 1rem;position:absolute;top:calc(50% - 1rem);-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;z-index:99}.main-nav a:hover .helper:after{background:#050505;content:'';height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:12px;z-index:98}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .active{background:rgba(0,0,0,.2);color:#9dce0a}.main-nav .active svg path{fill:#9dce0a;opacity:1}@-webkit-keyframes slideLeft{0%{opacity:0}100%{opacity:1}}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.related-tasks-body .pop-status,.related-tasks-body .pop-status a,.related-tasks-body .row{font-size:.9rem}.related-tasks-body .task-name input,.related-tasks-header .related-tasks-title{font-size:1rem}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine,.related-tasks-body .task-settings a,.related-tasks-header .icon{font-size:1.2rem}.related-tasks-body .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.related-tasks-header .related-tasks-title{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.related-tasks{margin-bottom:2rem;position:relative}.related-tasks-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.related-tasks-header .icon{color:#444;cursor:pointer}.related-tasks-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.related-tasks-body{width:100%}.related-tasks-body .row{-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;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.5rem 0 .5rem .5rem;width:100%}.related-tasks-body .row:hover{background:0 0}.related-tasks-body .row:hover .task-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .row:last-child{border:0}.related-tasks-body .row .tasks{overflow:hidden;width:100%}.related-tasks-body .row .status{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100px}.related-tasks-body .row .assigned-to{cursor:pointer;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .status:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover a{text-align:left;width:100%}.related-tasks-body .status .popover .point{text-align:center}.related-tasks-body .status .icon{color:#b8b8b8;margin-left:.2rem;opacity:0}.related-tasks-body .pop-status{background:#050505;color:#fff;display:none;left:40%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.related-tasks-body .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.related-tasks-body .blocked .icon,.related-tasks-body .blocked .icon:hover,.related-tasks-body .blocked a,.related-tasks-body .blocked a:hover,.related-tasks-body .blocked:hover .icon,.related-tasks-body .blocked:hover .icon:hover,.related-tasks-body .blocked:hover a,.related-tasks-body .blocked:hover a:hover,.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .task-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.related-tasks-body .task-name a{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-name input{margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .task-name.loading span{-webkit-animation:loading .5s linear,spin 1s linear infinite;animation:loading .5s linear,spin 1s linear infinite}.filters-inner .loading .loading-spinner,.ticket-detail-settings .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:#ff8282;color:#fff}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .iocaine,.related-tasks-body .iocaine:hover{background:rgba(157,206,10,.3)}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine{display:inline-block;margin-right:.5rem;vertical-align:top}.related-tasks-body .task-settings{margin:0 0 0 2rem;opacity:0;position:absolute;right:0;top:0;width:10%}.related-tasks-body .task-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .task-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .assigned-to{position:relative;text-align:left}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto.editable{cursor:pointer}.related-tasks-body .task-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{opacity:0;position:absolute;right:.5rem;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-data .ticket-data-container,.ticket-status .priority-data .pop-priority,.ticket-status .priority-data .pop-priority a,.ticket-status .severity-data .pop-severity,.ticket-status .severity-data .pop-severity a,.ticket-status .status-data .pop-status,.ticket-status .status-data .pop-status a,.ticket-status .type-data .pop-type,.ticket-status .type-data .pop-type a,.ticket-track-buttons .track-inner{font-size:.9rem}.ticket-data .ticket-title span:last-child,.ticket-track-buttons .track-button-counter{font-size:1.2rem}.ticket-data .ticket-title,.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .status-data .pop-status,.ticket-status .type-data .pop-type,.ticket-track-buttons .track-inner{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-detail-settings .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.ticket-data .ticket-title{font-size:1.6rem;margin:1.5rem 0 2rem}.ticket-data .ticket-title span{margin-right:.25rem}.ticket-data .ticket-data-container{margin-bottom:1rem}.ticket-data .ticket-data-container .icon{margin-left:.25rem}.ticket-data .level{display:inline-block;margin-right:.5rem;vertical-align:top}.filters h1,.filters h1 a{vertical-align:baseline}.ticket-data .level-name{color:#c2c2c2;float:right;text-transform:lowercase}.ticket-data .ticket-estimation .ticket-role-points{max-width:25%}.ticket-data .ticket-estimation .ticket-role-points:first-child{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.ticket-status{margin-bottom:.5rem}.ticket-status:last-child{margin:0}.ticket-status div{background:#e8e8e8;padding:.5rem 1rem .5rem .5rem;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .clickable:hover{background:#dcdcdc;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .type-data{position:relative}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .type-data .pop-type a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .severity-data{position:relative}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .severity-data .pop-severity a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .priority-data .pop-priority:after,.ticket-status .status-data .pop-status:after{background:#050505;height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);content:''}.ticket-status .priority-data{position:relative}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .priority-data .pop-priority a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{position:absolute;transform:rotate(45deg);width:0}.ticket-status .status-data{position:relative}.ticket-status .status-data .pop-status{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .status-data .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .status-data .pop-status a:last-child{border:0}.ticket-status .status-data .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .status-data .pop-status a:hover.point{color:#fff}.ticket-status .status-data .pop-status:after{position:absolute;transform:rotate(45deg);width:0}.ticket-track-buttons .track-inner{background:#e8e8e8;padding:.25rem;text-transform:uppercase;-webkit-transition:background .25s;transition:background .25s}.ticket-track-buttons .track-inner:hover{background:#dcdcdc}.ticket-track-buttons .track-button{width:100%}.ticket-track-buttons .active .track-button-counter{background:rgba(68,68,68,.5)}.ticket-track-buttons .active:hover .track-inner{background:rgba(157,206,10,.2)}.ticket-track-buttons .active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.ticket-track-buttons .active.is-hover path{fill:#ff8282}.single-project .track-container .icon path,.single-project .track-container .list-itemtype-track-likers.active path,.single-project .track-container .list-itemtype-track-watchers.active path{fill:currentcolor}.ticket-track-buttons .track-button-counter{background:rgba(68,68,68,.25);color:#f5f5f5;padding:0 .5rem}.ticket-track-buttons .vote-button{margin-bottom:.3rem}.ticket-track-buttons .watch-button{border-bottom:0}.ticket-track-buttons .ticket-watchers{margin:.5rem 0}.wizard-create-project .create-step1 fieldset:first-child,.wizard-create-project .wizard-action a:first-child{margin-right:.5rem}.ticket-track-buttons .add-watcher{display:block;margin:.5rem}.ticket-track-buttons .add-watcher .icon{background:rgba(68,68,68,.25);color:#f5f5f5;margin-right:.5rem;padding:.25rem}.ticket-track-buttons .add-watcher:hover .icon{background:#9dce0a;color:#f5f5f5;-webkit-transition:background .3s linear;transition:background .3s linear}.ticket-detail-settings{margin-top:2rem}.ticket-detail-settings .button,.ticket-detail-settings label{display:block;margin-bottom:.5rem;text-align:center}.ticket-detail-settings .button.editable,.ticket-detail-settings label.editable{cursor:pointer}.ticket-detail-settings .button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .button-gray,.ticket-detail-settings .button-gray:hover{background:#b8b8b8}.ticket-detail-settings .button-gray.editable:hover{background:#444;cursor:pointer}.ticket-detail-settings .button-gray.active{background:#72a114}.ticket-detail-settings .item-block.editable:hover{background:red;cursor:pointer}.ticket-detail-settings .button-red{display:block;margin-top:2rem}.wizard-create-project{background:url(/images/invitation_bg.jpg) center center no-repeat;bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910;background-size:cover;color:#fff;text-align:center}.wizard-create-project p{font-size:.9rem}.wizard-create-project .close{font-size:2rem;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.open.wizard-create-project{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.wizard-create-project{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.wizard-create-project fieldset{margin-bottom:1rem}.wizard-create-project .button-gray,.wizard-create-project .button-green{display:block;padding:12px;text-align:center}.wizard-create-project form{width:500px}.wizard-create-project .title{text-align:center;width:100%}.wizard-create-project h1,.wizard-create-project p{color:#fff}.wizard-create-project h1{line-height:1.5rem}.wizard-create-project p{opacity:.8}.wizard-create-project input,.wizard-create-project select,.wizard-create-project textarea{background:rgba(255,255,255,.7)}.wizard-create-project input::-webkit-input-placeholder,.wizard-create-project select::-webkit-input-placeholder,.wizard-create-project textarea::-webkit-input-placeholder{color:#444}.wizard-create-project input::-moz-placeholder,.wizard-create-project select::-moz-placeholder,.wizard-create-project textarea::-moz-placeholder{color:#444}.wizard-create-project input:-moz-placeholder,.wizard-create-project select:-moz-placeholder,.wizard-create-project textarea:-moz-placeholder{color:#444}.wizard-create-project input:-ms-input-placeholder,.wizard-create-project select:-ms-input-placeholder,.wizard-create-project textarea:-ms-input-placeholder{color:#444}.wizard-create-project .close{color:#fff}.wizard-create-project .close:hover{color:#ff8282}.wizard-create-project .wizard-step{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out;-webkit-animation-direction:alternate-reverse;animation-direction:alternate-reverse;display:none}.wizard-create-project .wizard-step.active{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out}.wizard-create-project .wizard-step.active.create-step1,.wizard-create-project .wizard-step.active.create-step2,.wizard-create-project .wizard-step.active.create-step3{display:block}.wizard-create-project .wizard-action div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .wizard-action a{color:#fff;display:inline-block;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 .template-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .create-step1 fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 input{display:none}.wizard-create-project .create-step1 input:checked+label{background:rgba(157,206,10,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label{background:rgba(245,245,245,.7);cursor:pointer;display:block;margin-bottom:1rem;padding:1rem;text-align:center;-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label:hover{background:rgba(114,161,20,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label .icon{font-size:3rem;color:#fff}.wizard-create-project .create-step1 h2{color:#fff;margin:.5rem 0 0;text-transform:uppercase}.wizard-create-project .create-step1 p{text-align:center}.wizard-create-project .progress-bar{bottom:0;height:.5rem;left:0;position:absolute;width:100%}.wizard-create-project .step1 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:25%}.wizard-create-project .step1 .progress-state span:nth-child(1){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .step2 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:75%}.wizard-create-project .step2 .progress-state span:nth-child(1),.wizard-create-project .step2 .progress-state span:nth-child(2){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .progress-state{position:absolute;width:100%}.wizard-create-project .progress-state span{color:rgba(255,255,255,.5);display:inline-block;margin-left:-100px;position:absolute;text-align:center;top:-2rem;-webkit-transition:all 1s ease-in;transition:all 1s ease-in;width:200px}.wizard-create-project .progress-state span:nth-child(1){left:25%}.wizard-create-project .progress-state span:nth-child(2){left:75%}.wizard-create-project .progress-bar-wrapper{background:rgba(255,255,255,.3);height:.5rem}.wizard-create-project .bar{background:rgba(157,206,10,.9);height:.5rem;left:0;position:absolute;top:0;width:0}.create-project{background:url(https://lh4.googleusercontent.com/-k7YewfrSQ_Q/VGdNZND0NBI/AAAAAAAAD1A/UDZBeSGR7iM/w1465-h824-no/Ultimate%2BMaterial%2BLollipop%2BCollection%2B-%2B480) center center no-repeat;background-size:cover;-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;bottom:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.create-project .tagline{font-size:2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#fff;line-height:2rem;text-transform:uppercase}.introjs-tooltip p,.single-project .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project fieldset{margin-bottom:1rem}.create-project .create-project-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.create-project h1{color:#fff;text-align:center}.create-project .logo,.create-project .tagline{margin-bottom:1rem;text-align:center}.create-project form{margin-bottom:2rem}.create-project input{background:#fff}.create-project input::-webkit-input-placeholder{color:#bdbdbd}.create-project input::-moz-placeholder{color:#bdbdbd}.create-project input:-moz-placeholder{color:#bdbdbd}.create-project input:-ms-input-placeholder{color:#bdbdbd}.create-project .button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.create-project .button:hover{background:#8c9eff}.create-project a:hover{color:#fff}.filters h2 .icon-arrow-right{font-size:1rem}.filters-inner .loading .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-width:1rem}.filters h1 .icon{margin:0}.filters h2 .icon-arrow-right,.single-project h1{vertical-align:middle}.filters h2{font-size:1.2rem;margin-top:1rem}.filters input{background:#444;color:#fff}.filters input::-webkit-input-placeholder{color:#b8b8b8}.filters input::-moz-placeholder{color:#b8b8b8}.filters input:-moz-placeholder{color:#b8b8b8}.filters input:-ms-input-placeholder{color:#b8b8b8}.filters .icon-search{color:#b8b8b8;position:absolute;right:.7rem;top:.7rem}.filters-inner{opacity:0;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.filters-inner .loading{margin:0;padding:8px;text-align:center;width:100%}.filters-applied{margin-top:.5rem}.filters-step-cat .save-filters{color:#fff;display:block;text-align:center}.filters-step-cat .my-filter-name{background:#444;color:#f5f5f5;width:100%}.filters-step-cat .my-filter-name::-webkit-input-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name::-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-ms-input-placeholder{color:#b8b8b8}.filters-cats{margin-top:2rem}.filters-cats li{border-bottom:1px solid #b8b8b8;text-transform:uppercase}.filters-cats .custom-filters .title{color:#72a114}.filters-cats a{color:#444;display:block;padding:.5rem 0 .5rem .5rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.filters-cats .icon{color:#444;float:right;opacity:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-overlay{background:-webkit-radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background-color:#f5f5f5}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#72a114;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .track-container .list-itemtype-track{font-size:.9rem}.single-project .description,.single-project .title{font-size:1rem}.single-project .single-project-intro{margin-bottom:2rem}.single-project .intro-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.single-project h1{color:#3f51b5;display:inline-block;line-height:1.2;margin-bottom:0;margin-right:3rem}.single-project .private{font-size:1rem;vertical-align:super}.single-project .like-watch-container{margin-left:auto}.single-project .track-buttons-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{color:#bdbdbd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.single-project .project-data,.single-project .title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#3f51b5}.single-project .track-container .icon svg{max-height:1rem;max-width:1rem}.single-project .project-data{display:flex}.single-project .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-shrink:3;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .involved-data{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-organization,.single-project .involved-team{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-organization li,.single-project .involved-team li{margin-right:.14rem;width:24%}.single-project .involved-organization li:nth-child(4n),.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-organization a,.single-project .involved-team a{display:block}.single-project .involved-organization img,.single-project .involved-team img{border-radius:.2rem;width:100%}.issues-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table .pop-status,.issues-table .pop-status a,.issues-table .table-main{font-size:.9rem}.issues-table .title{font-size:1rem}.empty-issues .title{font-size:1.2rem;text-transform:uppercase}.empty-issues p,.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.issues-table .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8}.issues-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .avatar,.kanban-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .title:hover{background:0 0}.issues-table .title div{cursor:pointer}.issues-table .title .votes{color:#555}.issues-table .table-main{border-bottom:1px solid #ebebeb}.issues-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-webkit-flex-basis:60%;-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-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-align:center;width:75px}.issues-table .votes{color:#555;-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes.inactive{color:#b8b8b8}.issues-table .votes.is-voted{color:#9dce0a}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .created-field,.issues-table .issue-field{-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{opacity:0;position:absolute;right:0;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .pop-status{background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99}.issues-table .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1200px){.issues-table .created-field,.issues-table .level-field{display:none}}@media (max-width:767px){.issues-table .assigned-field,.issues-table .created-field,.issues-table .level-field{display:none}}.empty-issues{margin-top:4rem;text-align:center}.empty-issues img{margin-bottom:1rem}.empty-issues p,.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table-body .task-column .kanban-column-intro{font-size:.9rem}.kanban-table-body,.kanban-table-header .task-colum-name .icon{font-size:1rem}.kanban-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table .vfold.task-colum-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold .kanban-task,.kanban-table .vfold.task-colum-name .icon-bulk,.kanban-table .vfold.task-colum-name .icon-closed-eye,.kanban-table .vfold.task-colum-name .icon-open-eye,.kanban-table .vfold.task-colum-name .icon-plus,.kanban-table .vfold.task-colum-name .icon-vfold,.kanban-table .vfold.task-colum-name .icon-vunfold,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.task-column{-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.kanban-table-header .kanban-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.kanban-table-body,.kanban-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-header .task-colum-name{font-size:1.2rem;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem .5rem .5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.kanban-table-header .task-colum-name .icon.hfold,.kanban-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-table-header .icon-closed-eye,.kanban-table-header .icon-open-eye{display:inline-block}.kanban-table-header .icon-closed-eye svg,.kanban-table-header .icon-open-eye svg{fill:#b8b8b8;height:1.1rem;margin-top:.25rem;width:1.1rem}.kanban-table-header .icon-closed-eye:hover svg,.kanban-table-header .icon-open-eye:hover svg{fill:#72a114}.kanban-table-header .icon-open-eye .svg-eye-closed{display:none}.kanban-table-header .icon-closed-eye .svg-eye-closed,.kanban-table-header .icon-open-eye .svg-eye-open{display:block}.kanban-table-header .icon-closed-eye .svg-eye-open{display:none}.kanban-table-body{display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-inner,.search-filter ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;margin:0 10px 0 0;max-width:300px;overflow-y:auto;widows:300px}.kanban-table-body .task-column:last-child{margin-right:0}.kanban-table-body .task-column .kanban-column-intro{font-family:opensans-semibold,Arial,Helvetica,sans-serif;color:#b8b8b8;margin:1rem 2rem}.kanban-table-body .task-column .kanban-column-intro.active{color:#050505}.kanban-table-body .task-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-inner{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.search-filter a{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;opacity:.2}.search-filter ul{border-bottom:3px solid #b8b8b8;display:flex;padding-bottom:.5rem}.search-filter li{margin-right:1rem}.search-filter .active,.search-filter a:hover{color:#555;opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.search-filter .icon{margin-right:.4rem}.search-filter .name{padding-left:5px}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#b8b8b8}.search-in input::-moz-placeholder{color:#b8b8b8}.search-in input:-moz-placeholder{color:#b8b8b8}.search-in input:-ms-input-placeholder{color:#b8b8b8}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{color:#b8b8b8}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #f5f5f5}.search-result-table .user-story-name .icon{font-size:1rem;color:#b8b8b8}.empty-search-results .title{font-size:1.2rem;text-transform:uppercase}.search-result-table .row{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .row .ref{-webkit-flex-basis:30px;-ms-flex-preferred-size:30px;flex-basis:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 1rem}.search-result-table .row .user-stories{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.search-result-table .row .points,.search-result-table .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem}.search-result-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.search-result-table .points,.search-result-table .status{position:relative}.search-result-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.empty-search-results{margin-top:4rem;text-align:center}.empty-search-results img{margin-bottom:1rem}.empty-search-results p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.team-filters nav li{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.table-team .team-header,.team-filters nav li:last-child{border-bottom:0}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters nav a{display:block;padding:1rem 0 1rem 1rem}.team-filters nav a.active,.team-filters nav a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.team-filters nav .active,.team-filters nav a.active.icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.team-filters nav .icon{color:#050505;float:right;opacity:0}.table-team .leave-project,.table-team .popover,.table-team .popover a{font-size:.9rem}.table-team .attribute .points{font-size:1.6rem}.table-team .attribute,.table-team .attribute .points,.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.policy-table .policy-table-header,.table-team .avatar .name,.table-team .team-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.table-team .row{padding:.5rem}.table-team .username{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:6;-webkit-flex:6;-ms-flex:6;flex:6;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{color:#050505;font-size:1.8rem}.table-team .attribute .points{color:#444}.table-team .attribute .top{color:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{color:#b8b8b8;display:block}.table-team .leave-project .icon{margin-right:.2rem}.table-team .leave-project:hover .icon{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .hero{width:100%}.table-team .hero .row{background:#f5f5f5;border-bottom:0;margin:1rem 0}.table-team .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.table-team .avatar img{-webkit-flex-basis:66px;-ms-flex-preferred-size:66px;flex-basis:66px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:66px}.table-team .avatar figcaption{margin-left:1rem;width:65%}.table-team .avatar figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .position{color:#b8b8b8}.table-team .popover{background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99}.table-team .popover a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.policy-table .policy-table-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{border-bottom:2px solid #b8b8b8}.user-change-password label,.user-profile label{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#72a114;-webkit-transition:background .3s linear;transition:background .3s linear}.policy-table label{background:#b8b8b8;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile form .avatar-container p{font-size:.75rem}.user-profile .delete-account,.user-profile form .avatar-container .use-gravatar{font-size:.9rem}.user-profile form .avatar-container span{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.user-profile form .avatar-container .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem}.user-profile form{max-width:700px;width:100%}.user-profile form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.user-profile form .avatar-container{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:1rem}.user-profile form .avatar-container .image-container{position:relative}.user-profile form .avatar-container .avatar{border-radius:8%;width:100%}.user-profile form .avatar-container .overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile form .avatar-container .loading-spinner{border:0;min-height:3rem;min-width:3rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.user-profile form .avatar-container p{line-height:.8rem;margin-bottom:.3rem;text-align:center}.user-profile form .avatar-container .use-gravatar{cursor:pointer;display:inline-block;text-align:center;width:100%}.user-profile form .data{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.user-profile fieldset{margin-bottom:1rem}.user-profile .submit{margin-top:2rem}.user-profile label{display:block;margin-bottom:.5rem}.user-profile textarea{min-height:7rem}.user-profile .button-green{color:#fff;cursor:pointer;display:block;padding:12px;text-align:center}.user-profile .delete-account{display:block;margin-top:1rem}.wiki-nav li input{font-size:1rem}.wiki-nav li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.wiki-nav li:hover .icon{opacity:1;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li a{display:block;padding:1rem 0 1rem 1rem}.wiki-nav li a span{cursor:pointer}.wiki-nav li .icon{color:#050505;float:right;opacity:0;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background:#444;color:#f5f5f5}.wiki-nav li input::-webkit-input-placeholder{color:#b8b8b8}.wiki-nav li input::-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-ms-input-placeholder{color:#b8b8b8}.wiki-nav li .loading{margin:0;padding:8px;text-align:center;width:100%}.wiki-nav .add-button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.wiki-summary .wiki-user-modification,.wiki-summary div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.wiki-summary .username{font-size:1.2rem;color:#9dce0a;white-space:nowrap}.wiki-summary{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary div{display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:1rem}.wiki-summary .number{line-height:2rem;top:0}.wiki-summary .wiki-user-modification{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary figure{margin-right:.3rem;width:32px}.external-app-wrapper .app-card a,.external-app-wrapper .app-card p,.external-app-wrapper .user-card a{font-size:.75rem}.external-app-wrapper .cancel{font-size:.9rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:6rem;margin:0 auto;width:6rem}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.external-app-wrapper .app-card a,.external-app-wrapper .button-green,.external-app-wrapper .user-card a{display:block}.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card .app-image{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .cancel{display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #f5f5f5;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;-webkit-transition-delay:.2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single.blocked,.working-on .duty-single.blocked{background:rgba(255,130,130,.2);color:red}.watching .duty-single>a,.working-on .duty-single>a{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:0;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}.empty-ticket .data,.home-project-list li a{-webkit-box-orient:vertical;-webkit-box-direction:normal}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper,.home-wrapper .title-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-wrapper{display:flex}.home-wrapper .duty-summary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .project-list{width:250px}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;margin:0 0 .5rem;padding:.9rem 1rem}.empty-ticket,.home-project-list li a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-project-list p{font-size:.75rem}.projects-empty p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.home-project-list h2,.home-project-list p{font-family:opensans-regular,Arial,Helvetica,sans-serif}.home-project-list li{border:1px solid #dedede;border-radius:3px;cursor:pointer;margin-bottom:.75rem;padding:1rem;text-overflow:ellipsis}.home-project-list li:hover{border-color:#9dce0a;-webkit-transition:all .3s linear;transition:all .3s linear}.home-project-list li:hover p{color:#555;-webkit-transition:color .3s linear;transition:color .3s linear}.home-project-list li:hover .private path{fill:#555;-webkit-transition:fill .3s linear;transition:fill .3s linear}.home-project-list li a{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:5rem}.home-project-list h2{color:#555;font-size:1.5rem;line-height:1.3;margin-bottom:.5rem;text-transform:none}.home-project-list h2 .project-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.home-project-list p{color:#b8b8b8;line-height:125%;margin:0}.projects-empty{text-align:center}.projects-empty svg{height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty svg path{fill:#f5f5f5}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:2rem 9rem 1rem;text-align:center}.empty-ticket{display:flex}.empty-ticket .data,.navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.empty-ticket:not(:last-child){border-bottom:1px solid #f5f5f5;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e8e8e8;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:40vw}.empty-ticket .line:last-child{margin:0;width:20vw}.navbar{display:flex;height:40px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar:after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar .nav-left>a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left>a.logo{background:rgba(0,0,0,.2);padding:.4rem .75rem}.navbar .nav-left>a svg{height:1.6rem;max-width:2rem}.navbar .nav-left>a path{fill:#fff}.navbar .nav-right{margin-left:auto}.navbar .nav-right a{color:#fff;padding:.5rem 2rem}.navbar a{color:#fff;display:inline-block;-webkit-transition:all .2s linear;transition:all .2s linear}.navbar a svg path{fill:#131a5c}.navbar a:hover{background:rgba(0,0,0,.2);color:#8c9eff}.navbar a:hover svg path{fill:#fff}.navbar a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar a.user-avatar span{padding-right:1rem}.navbar img{height:2.5rem;padding-left:.5rem;vertical-align:middle}.navbar svg{height:1.2rem;max-width:1.2rem}.navbar svg path{fill:#fff;-webkit-transition:all .2s;transition:all .2s}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(33,33,33,0);border-bottom-color:#212121}.navbar-dropdown ul:after{border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown a{color:#bdbdbd;display:block;padding:.8rem .5rem}.navbar-dropdown .create-options,.profile-filter{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#8c9eff}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.navbar-dropdown a.import-project-button{padding-left:.75rem;padding-right:.75rem}.navbar-dropdown .create-options{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.profile-favs{border-top:1px solid #f5f5f5}.profile-filter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile,.profile-filter .searchbox{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.profile-filter .searchbox{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{color:grayer;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs,.profile-projects,.profile-timeline{border-top:1px solid #f5f5f5}.profile-filter .searchbox input:focus{border-bottom:1px solid #b8b8b8;outline:0;-webkit-transition:border-bottom .3s ease-in;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#b8b8b8;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile .timeline-wrapper .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-height:3rem;max-width:3rem}.profile{display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{background:#fff;margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;-webkit-transition:all .3s cubic-bezier(.09,.43,.35,.95);transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .profile-sidebar{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{margin:2rem auto;max-width:160px;text-align:center}.profile .empty-tab p{font-size:.9rem}.profile-bar .profile-stats .stat-name{font-size:.9rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username{font-size:1.2rem}.profile-bar h2{font-size:1.6rem}.profile-bar .profile-stats .stat-number,.profile-bar h1{font-size:2rem}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .profile-organizations h3,.profile-bar .profile-stats .stat-number,.profile-bar h1{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{-webkit-filter:brightness(40%) saturate(150%) hue-rotate(60deg);filter:brightness(40%) saturate(150%) hue-rotate(60deg);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1);-webkit-transition-delay:.3s;transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.01,.7,1,1);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#b8b8b8;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar h1{line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar h2{color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#b8b8b8;margin-bottom:1rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#b8b8b8}.profile-bar .profile-stats{border-bottom:1px solid #f5f5f5;color:#555;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{display:block;line-height:1}.profile-bar .profile-stats .stat-name{display:block}.profile-bar .profile-organizations{border-bottom:1px solid #f5f5f5;border-top:1px solid #f5f5f5;margin-bottom:1rem;padding:1rem 0}.profile-bar .profile-organizations h3{margin-bottom:.5rem}.profile-bar .profile-organizations .profile-organizations-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.profile-bar .profile-organizations .organization{background:#b8b8b8;border-radius:5px;height:45px;margin-right:.2rem;width:45px}.profile-bar .profile-quote{background:url(/images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contact-single .profile-contact-data h1 span{font-size:.9rem}.profile-contact-single .profile-contact-data .extra-info{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-contact-single .profile-contact-data h1,.profile-contact-single .profile-contact-data h1 span{font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-contacts{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}.profile-contact-filters{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.profile-contact-filters a{border-bottom:2px solid #fff;color:#b8b8b8;display:inline-block;padding:1rem 1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-contact-filters a.active,.profile-contact-filters a:hover{border-bottom:2px solid #b8b8b8;color:#72a114}.profile-contact-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.8rem 1rem}.profile-contact-single .profile-contact-picture{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:1rem;max-width:54px}.profile-contact-single .profile-contact-picture img{border-radius:.2rem;width:100%}.profile-contact-single .profile-contact-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-contact-single .profile-contact-data h1{font-size:1.2rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:1.6;margin-bottom:0;text-transform:none}.profile-contact-single .profile-contact-data h1 span{background:#f5f5f5;color:#555;margin-left:1rem;padding:.1rem .3rem}.profile-contact-single .profile-contact-data p{color:#555;margin-bottom:0}.profile-contact-single .profile-contact-data .extra-info{color:#555}.profile-contact-single .profile-contact-data .position{margin-right:.3rem}.profile-contact-single .profile-project-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-left:auto;width:100px}.profile-contact-single .profile-project-stats div{color:#b8b8b8;margin-right:.5rem}.profile-contact-single .profile-project-stats div .icon{margin-right:.2rem;vertical-align:center}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#b8b8b8;display:inline-block;padding:1rem 1.25rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #f5f5f5;border-right:1px solid #f5f5f5;position:relative;top:1px;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .icon{margin-right:.4rem}.profile-sidebar h4{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.profile-sidebar h4 .icon{color:#b8b8b8;margin-right:.3rem;vertical-align:text-bottom}.profile-sidebar p{font-size:.9rem;color:#b8b8b8}.profile-sidebar a{color:#72a114}.profile-sidebar .trans-button{margin-bottom:1rem}.profile-projects .list-itemtype-project{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:10rem}.profile-projects .list-itemtype-project .list-itemtype-project-right{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-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:200px}.project-list-wrapper .help-area{font-size:.9rem;color:#b8b8b8;width:200px}.project-list-wrapper .drag{font-size:1.2rem}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.project-list-wrapper .create-options a.create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .create-options a.import-project-button{padding:.53rem .8rem}.project-list-wrapper .create-options a.import-project-button:hover{background:#444}.project-list-wrapper .create-options a.import-project-button .icon-upload{margin:0}.project-list-wrapper .project-list-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .placeholder{background-color:#fdfdfd;height:5rem}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:#fcfef8;cursor:move;-webkit-transition:background .3s;transition:background .3s}.master,body{background:#fff}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .drag{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:#b8b8b8;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.profile-timeline .single-attachment span{font-size:1rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child,.profile-timeline .activity-member-view a{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-timeline .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.profile-timeline .activity-item{border-bottom:1px solid #f5f5f5;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#72a114}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#b8b8b8;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-webkit-flex-basis:2rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-member-view{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-timeline .activity-member-view p{color:#b8b8b8}a,body{color:#424242}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.profile-timeline .single-attachment .icon{margin-right:.3rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{max-height:3rem;max-width:3rem}:root .taskboard-table-body .task-row,_:-ms-fullscreen .task-row{min-height:auto}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}.menu-secondary{background:#fcfdff}.menu-tertiary{background-color:#1a237e}.extrabar{background:#fcfdff}h1,h2,h3,h4,h5,h6{color:#212121}a:hover{color:#3f51b5}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#3f51b5;color:#424242}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a4a4a4}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#a4a4a4}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#a4a4a4}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a4a4a4}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #f44336}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);color:#fff}blockquote{border-left:5px solid #8c9eff}blockquote,blockquote p,cite{color:#757575}.summary{background:#424242;color:#fff}.kanban-table-header .task-colum-name .icon,.taskboard-table-header .task-colum-name .icon{color:#3f51b5}.navbar{background:rgba(233,30,99,.6)}.navbar:after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#0d113f;background-image:none}.main-nav svg path{fill:#fff}.taskboard-table-header .task-colum-name{background:#f2f4ff;border-top:3px solid #3f51b5}.taskboard-table-body .taskboard-tasks-box{background:#f5f5f5}.kanban-table-header .task-colum-name{background:#f2f4ff;border-top:3px solid #3f51b5}.kanban-table-body .kanban-uses-box{background:#f5f5f5} \ No newline at end of file diff --git a/dist/styles/theme-taiga.css b/dist/styles/theme-taiga.css index 261a84e..17a092c 100644 --- a/dist/styles/theme-taiga.css +++ b/dist/styles/theme-taiga.css @@ -1,4 +1,4 @@ @charset "UTF-8";.introjs-arrow,blockquote:after,blockquote:before,q:after,q:before{content:''}.pika-table,table{border-collapse:collapse;border-spacing:0}.kanban-task-minimized .task-name,.ticket-estimation .ticket-role-points .role,h1 .date,h1 span{text-overflow:ellipsis;white-space:nowrap}.lightbox textarea,.wizard-create-project textarea,textarea{resize:vertical}.change-entry .activity-fromto,.home-project-list p,.kanban-task-maximized .task-name,.profile-bar .not-full-name,.profile-bar h1{word-wrap:break-word}.codehilite .hll{background-color:#49483e}.codehilite .c{color:#75715e}.codehilite .err{color:#960050;background-color:#1e0010}.codehilite .k{color:#66d9ef}.codehilite .l{color:#ae81ff}.codehilite .n{color:#f8f8f2}.codehilite .o{color:#f92672}.codehilite .p{color:#f8f8f2}.codehilite .c1,.codehilite .cm,.codehilite .cp,.codehilite .cs{color:#75715e}.codehilite .ge{font-style:italic}.codehilite .gs{font-weight:700}.codehilite .kc,.codehilite .kd{color:#66d9ef}.codehilite .kn{color:#f92672}.codehilite .kp,.codehilite .kr,.codehilite .kt{color:#66d9ef}.codehilite .ld{color:#e6db74}.codehilite .m{color:#ae81ff}.codehilite .s{color:#e6db74}.codehilite .na{color:#a6e22e}.codehilite .nb{color:#f8f8f2}.codehilite .nc{color:#a6e22e}.codehilite .no{color:#66d9ef}.codehilite .nd{color:#a6e22e}.codehilite .ni{color:#f8f8f2}.codehilite .ne,.codehilite .nf{color:#a6e22e}.codehilite .nl,.codehilite .nn{color:#f8f8f2}.codehilite .nx{color:#a6e22e}.codehilite .py{color:#f8f8f2}.codehilite .nt{color:#f92672}.codehilite .nv{color:#f8f8f2}.codehilite .ow{color:#f92672}.codehilite .w{color:#f8f8f2}.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo{color:#ae81ff}.codehilite .s2,.codehilite .sb,.codehilite .sc,.codehilite .sd{color:#e6db74}.codehilite .se{color:#ae81ff}.codehilite .s1,.codehilite .sh,.codehilite .si,.codehilite .sr,.codehilite .ss,.codehilite .sx{color:#e6db74}.codehilite .bp,.codehilite .vc,.codehilite .vg,.codehilite .vi{color:#f8f8f2}.codehilite .il{color:#ae81ff}.codehilite .gu{color:#75715e}.codehilite .gd{color:#f92672}.codehilite .gi{color:#a6e22e}.mCustomScrollbar{-ms-touch-action:none;touch-action:none}.mCustomScrollbar.mCS_no_scrollbar{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0;opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4);height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}.markItUp .markItUpButton1 a{background-image:url(../images/markitup/h1.png)}.markItUp .markItUpButton2 a{background-image:url(../images/markitup/h2.png)}.markItUp .markItUpButton3 a{background-image:url(../images/markitup/h3.png)}.markItUp .markItUpButton4 a{background-image:url(../images/markitup/bold.png)}.markItUp .markItUpButton5 a{background-image:url(../images/markitup/italic.png)}.markItUp .markItUpButton6 a{background-image:url(../images/markitup/stroke.png)}.markdown .markItUpButton7 a{background-image:url(../images/markitup/list-bullet.png)}.markdown .markItUpButton8 a{background-image:url(../images/markitup/list-numeric.png)}.markdown .markItUpButton9 a{background-image:url(../images/markitup/picture.png)}.markdown .markItUpButton10 a{background-image:url(../images/markitup/link.png)}.markdown .markItUpButton11 a{background-image:url(../images/markitup/quotes.png)}.markdown .markItUpButton12 a{background-image:url(../images/markitup/code.png)}.markdown .preview-icon a{background-image:url(../images/markitup/preview.png)}.markdown .help a{background-image:url(../images/markitup/help.png)}.markItUp *{margin:0;padding:0;outline:0}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif}.markItUpEditor{font:12px 'Courier New',Courier,monospace;padding:5px;height:320px;clear:both;line-height:18px;overflow:auto}.markItUpPreviewFrame{overflow:auto;background-color:#FFF;width:99.9%;height:300px;margin:5px 0}.markItUpFooter{width:100%}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin-left:auto;margin-right:auto;background-image:url(../images/markitup/handle.png);cursor:n-resize}.markItUp .markItUpHeader ul{margin:0}.markItUpHeader ul li{list-style:none;position:relative;margin:3px}.markItUpHeader ul li:hover>ul{display:block}.markItUpHeader ul .markItUpDropMenu{background:url(../images/markitup/menu.png) 115% 50% no-repeat;margin-right:5px}.markItUpHeader ul .markItUpDropMenu li{margin-right:0}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0;background:#FFF;border:1px solid #000}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000}.markItUpHeader ul ul .markItUpDropMenu{background:url(../images/markitup/submenu.png) 100% 50% no-repeat #FFF}.markItUpHeader ul .markItUpSeparator{margin:2px 10px 0;width:1px;height:16px;overflow:hidden;background-color:#CCC}.introjs-button,button{overflow:visible}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px}.markItUpHeader ul ul ul li{float:none}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0}.markItUpHeader ul ul a{display:block;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! * Pikaday * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */.pika-single{display:block;position:relative;width:240px;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.introjs-bullets ul,.introjs-button,.pika-select{display:inline-block}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;position:absolute!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid #fff;position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-color:transparent transparent #fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow.left,.introjs-arrow.right{top:10px}.introjs-arrow.right,.introjs-arrow.right-bottom{right:-10px;border-color:transparent transparent transparent #fff}.introjs-arrow.right-bottom{bottom:10px}.introjs-arrow.bottom{bottom:-10px;border-color:#fff transparent transparent}.introjs-arrow.left,.introjs-arrow.left-bottom{left:-10px;border-color:transparent #fff transparent transparent}.introjs-arrow.left-bottom{bottom:10px}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{position:relative;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-progress,.loader-active,.taskboard,.taskboard-inner,body.loading-project,h1 .date,h1 span{overflow:hidden}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.admin-membership header a,.header-with-actions .button,.kanban .kanban-settings,.save-wiki{float:right}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.master,fieldset{position:relative}body,html{width:100%;min-height:100%}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}body{font-family:opensans-regular,Arial,Helvetica,sans-serif;line-height:1.3}.icon{font-family:taiga}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body .master.ng-animate{-webkit-transition:0;transition:0}.drag-active{overflow-x:hidden}.master{height:100%;min-height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu-secondary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary.filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:0}.menu-secondary.filters-bar.active{padding:2em 1em;-webkit-transition:all .2s linear;transition:all .2s linear;width:260px}.menu-secondary.filters-bar.active .filters-inner{opacity:1;-webkit-transition:all .4s ease-in;transition:all .4s ease-in}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-webkit-box-flex:4;-webkit-flex:4;-ms-flex:4;flex:4;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions .action-buttons{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;margin-left:10px}fieldset,p img{margin:0}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}h2{font-size:2rem}h1,h1 span{font-size:3rem}h1,h2{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}.wysiwyg dl dt,strong{font-weight:700}h1{margin-bottom:1rem;text-transform:uppercase}h1 span{margin-right:.5rem;vertical-align:bottom}h1 span.green,h1 span:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#72a114}h1 .date{max-width:500px;color:#b8b8b8}h2{line-height:1.2;margin-bottom:1rem}p{line-height:1.5}em{font-style:italic}[class*=' icon-']:before,[class^=icon-]:before,[data-icon]:before{font-family:taiga!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;speak:none;text-transform:none!important}hr{border:solid #050505;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{-webkit-transition:color .3s linear;transition:color .3s linear}[data-icon]:before{content:attr(data-icon)}.admin-contrib .help .alt-image,.admin-third-parties .help .alt-image,.wysiwyg dl dt{font-style:italic}.icon-bug:before{content:'a'}.icon-copy:before{content:'b'}.icon-minimize:before{content:'c'}.icon-maximize:before{content:'d'}.icon-comment:before{content:'e'}.icon-plus:before{content:'f'}.icon-attachments:before{content:'g'}.icon-edit:before{content:'h'}.icon-documents:before{content:'i'}.icon-delete:before{content:'j'}.icon-arrow-bottom:before{content:'k'}.icon-arrow-left:before{content:'l'}.icon-arrow-right:before{content:'m'}.icon-arrow-up:before{content:'n'}.icon-briefcase:before{content:'o'}.icon-caret-down:before{content:'p'}.icon-caret-up:before{content:'q'}.icon-check-square:before{content:'r'}.icon-notification-error:before{content:'s'}.icon-settings:before{content:'t'}.icon-document:before{content:'u'}.icon-warning:before{content:'v'}.icon-move:before{content:'w'}.icon-drag-v:before{content:'x'}.icon-filter:before{content:'y'}.icon-help:before{content:'z'}.icon-reload:before{content:'A'}.icon-writer:before{content:'B'}.icon-stats:before{content:'C'}.icon-floppy:before{content:'D'}.icon-warning-alt:before{content:'E'}.icon-video:before{content:'F'}.icon-bulk:before{content:'G'}.icon-vunfold:before{content:'H'}.icon-tasks:before{content:'I'}.icon-kanban:before{content:'J'}.icon-search:before{content:'K'}.icon-wiki:before{content:'L'}.icon-team:before{content:'M'}.icon-vfold:before{content:'N'}.icon-issues:before{content:'O'}.icon-iocaine:before{content:'P'}.icon-archive:before{content:'Q'}.icon-capslock:before{content:'R'}.icon-upload:before{content:'S'}.icon-github:before{content:'T'}.icon-timeline:before{content:'U'}.icon-scrum:before{content:'V'}.icon-project:before{content:'W'}.icon-heart:before{content:'X'}.icon-eye:before{content:'Y'}@-webkit-keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@-webkit-keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;flex:10}}@keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;-ms-flex:10;flex:10}}@-webkit-keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes blink{85%{opacity:1}100%{opacity:.6}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote cite,sup{font-size:.9rem}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{display:block}blockquote cite:before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}sup{vertical-align:super}.blocked-warning .icon,.icon,.us-story-main-data .us-title.blocked{vertical-align:middle}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}.pika-single{z-index:999999}.pika-single .pika-title{color:#444}.pika-single .is-selected .pika-button{background:#72a114;border-radius:0!important;box-shadow:inset 0 1px 3px #72a114}.pika-single .is-today .pika-button{color:#72a114}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#9dce0a!important;border-radius:0!important;box-shadow:inset 0 1px 3px #9dce0a!important}fieldset{border:0;padding:0;width:100%}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{-webkit-transition:border .3s linear;transition:border .3s linear}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.icon-capslock{bottom:.6rem;color:#555;display:none;position:absolute;right:1rem}.auth,.error-main{bottom:0;z-index:999;left:0}.admin-membership header:after{clear:both;content:'';display:table}.admin-membership .check input{height:40px;width:85px}.admin-roles p{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#b8b8b8}.auth .logo,.auth .tagline{color:#fff;text-align:center}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.kanban,.taskboard{height:calc(100vh - 40px)}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);position:absolute;width:100%}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.project-values-title{-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;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem;text-transform:uppercase}.project-values-title h2{margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(/images/bg.png) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.invitation-main .avatar,.invitation-main .invitation-container,.kanban{-webkit-box-orient:vertical;-webkit-box-direction:normal}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth .logo{font-size:3rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.auth .auth-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{padding:0 33%;text-align:center;width:100%}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{text-align:center}.auth .login-text a:hover,.auth .register-text a:hover{color:#9dce0a}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moustache;animation-name:moustache;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;fill:rgba(114,161,20,.9);stroke:#9dce0a;stroke-width:1px;-webkit-transform-origin:50% 20%;-ms-transform-origin:50% 20%;transform-origin:50% 20%;-webkit-transition:.3s;transition:.3s}.moustache:hover{fill:rgba(157,206,10,.9);-webkit-transition:.3s;transition:.3s}.list-itemtype-project .icon path,.list-itemtype-project .list-itemtype-track-likers.active path,.list-itemtype-project .list-itemtype-track-watchers.active path,.list-itemtype-ticket .icon path,.list-itemtype-ticket .list-itemtype-track-likers.active path,.list-itemtype-ticket .list-itemtype-track-watchers.active path,.list-itemtype-timeline .icon path,.list-itemtype-timeline .list-itemtype-track-likers.active path,.list-itemtype-timeline .list-itemtype-track-watchers.active path,.list-itemtype-user .icon path,.list-itemtype-user .list-itemtype-track-likers.active path,.list-itemtype-user .list-itemtype-track-watchers.active path{fill:currentcolor}@-webkit-keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}.backlog-menu{background:#f5f5f5;color:#050505;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .trans-button{color:#050505;display:inline-block;padding:.4rem 1.5rem}.backlog-menu .trans-button.active,.backlog-menu .trans-button:hover{background:#555;color:#f5f5f5}.backlog-menu .trans-button.active:hover{background:#a2a2a2}.backlog-menu .trans-button.move-to-current-sprint{display:none}.invitation-main,.invitation-main .invitation-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-menu .button-bulk{margin-left:.2rem}.invitation-main{background:url(/images/invitation_bg.jpg) center center no-repeat;-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;background-size:cover;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;z-index:999}.invitation-main .invitation-form .forgot-pass{font-size:.9rem}.invitation-main .avatar .person-name,.invitation-main .invitation-text,.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.invitation-main .invitation-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar .person-name{color:#fff}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{color:#fff;text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header,.invitation-main .register-text{color:#fff}.invitation-main .login-form,.invitation-main .register-form{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .register-text a{color:#72a114}.invitation-main .button-auth{display:block}.error-main,.kanban{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.invitation-main .button-blackish:hover{background:#72a114}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.issues .filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:260px}.issues .filters-inner{opacity:1;padding:1rem}.kanban{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px)}.kanban header{min-height:70px}.kanban .burndown-container{display:none}.error-main{background:url(/images/invitation_bg.jpg) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.taskboard-inner,.us-story-main-data header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table,.taskboard-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal}.error-main .error-container{color:#fff;-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff;margin-bottom:3rem}.error-main a{color:#72a114}.error-main a:hover{color:#9dce0a}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.taskboard-inner{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.team h2{margin:1rem 0}.team h2 span:last-child{color:#72a114}.us-story-main-data .us-title .block-desc-container,.us-story-main-data .us-title .us-related-task{font-size:.9rem}.us-story-main-data .us-title,.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{font-size:1.2rem}.blocked-warning .blocked,.blocked-warning .icon,.issue-nav a,.us-story-main-data .us-title .us-name,.us-story-main-data .us-title .us-number{font-size:2rem}.blocked-warning .blocked,.us-story-main-data .us-title .us-number{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.us-story-main-data .us-title{font-family:opensans-regular,Arial,Helvetica,sans-serif}.us-story-main-data .us-title .block-description-title,.us-story-main-data .us-title.blocked .unblock{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.us-story-main-data{margin-bottom:2rem}.us-story-main-data header{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.us-story-main-data .us-title{background:#f5f5f5;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked{background:red;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked .us-title-text,.us-story-main-data .us-title.blocked input{margin-bottom:.5rem}.us-story-main-data .us-title.blocked .us-name,.us-story-main-data .us-title.blocked .us-number,.us-story-main-data .us-title.blocked .us-related-task{color:#fff}.us-story-main-data .us-title.blocked a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title.blocked a:hover{color:#ff8282}.us-story-main-data .us-title.blocked .unblock{color:#fff;float:right}.us-story-main-data .us-title.blocked .unblock:hover{color:#ff8282;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title p{margin-bottom:0}.us-story-main-data .us-title .us-edit-name-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.us-story-main-data .us-title .edit-subject{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.basic-table,.us-story-main-data .us-title .us-title-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.us-story-main-data .us-title input{background:#fff;-webkit-box-flex:9;-webkit-flex-grow:9;-ms-flex-positive:9;flex-grow:9}.us-story-main-data .us-title .save-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.us-story-main-data .us-title .us-title-text{-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;display:flex;margin-bottom:0;max-width:94%}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{max-height:1.5rem;max-width:1.5rem}.us-story-main-data .us-title .us-title-text:hover .icon-edit{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.us-story-main-data .us-title .us-number{color:#b8b8b8;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;line-height:2.2rem;margin-right:.5rem}.us-story-main-data .us-title .us-name{color:#444;display:inline-block;line-height:2.2rem;padding-right:1rem;width:100%}.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{color:#b8b8b8;margin-left:.5rem}.us-story-main-data .us-title .icon-edit{opacity:0}.us-story-main-data .us-title .us-related-task{color:#b8b8b8;margin-top:.5rem}.us-story-main-data .us-title .us-related-task a{border-left:1px solid #b8b8b8;padding:0 .2rem}.us-story-main-data .us-title .us-related-task a:hover{color:#72a114}.us-story-main-data .us-title .us-related-task a:first-child{border:0}.us-story-main-data .us-title .block-description-title{color:#fff;margin-right:.5rem}.us-story-main-data .us-title .block-description{color:#fff;display:inline-block;margin-right:5rem}.blocked-warning{margin-bottom:1rem}.blocked-warning .blocked{color:red;line-height:2.5rem;margin-bottom:.5rem}.blocked-warning .block-description{color:#444;margin:0}.duty-content .edit-description,.wiki-content,.wysiwyg{margin-bottom:2rem}.issue-nav{position:absolute;right:1rem;top:1rem}.duty-content{position:relative}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#444}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#b8b8b8}.duty-content textarea{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-content .edit{color:#444}.duty-content .view-description .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .save{top:.4rem}.duty-content .edit-description .edit{position:absolute;right:2.5rem;top:.4rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.wysiwyg textarea{background:#fff;max-height:none}.wiki .remove{font-size:.9rem;color:#b8b8b8}.wiki .remove:hover span{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove:hover .icon{color:red;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove .icon{color:#b8b8b8;margin-right:.2rem}.wiki-content{position:relative}.wiki-content.editable:hover .wysiwyg{background:#f5f5f5;cursor:pointer}.wiki-content .view-wiki-content:hover .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .view-wiki-content .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .icon:hover{color:#444;opacity:.3;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .preview-icon{position:absolute;right:3.5rem}.wiki-content .edit-wiki-content .action-container{position:absolute;right:1rem;top:.3rem}.wiki-content .edit-wiki-content .edit{position:absolute;right:3.5rem;top:.4rem}.wiki-content .preview{padding-top:1.8rem}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row,.card-placeholder .placeholder-avatar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table .row,.empty-burndown,.loading-bar{-webkit-box-orient:horizontal}.basic-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:flex;-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;padding:.3rem 0;text-align:left;width:100%}.basic-table .row .width-1{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:4;-webkit-flex-grow:4;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:5;-webkit-flex-grow:5;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:7;-webkit-flex-grow:7;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.beta{left:0;position:absolute;top:0;z-index:9999}.button,.button-auth,.button-blackish,.button-bulk,.button-gray,.button-green,.button-red,.trans-button,a.button-gray,a.button-green{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:0 0;border:0;color:#fff;cursor:pointer;display:inline-block;padding:.4rem 2rem;text-align:center;text-transform:uppercase;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.trans-button{font-size:1rem}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button:hover,.trans-button:hover{color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.trans-button span{-webkit-animation:loading .5s linear;animation:loading .5s linear}.button span,.button-auth span,.button-blackish span,.button-bulk span,.button-gray span,.button-green span,.button-red span,.trans-button span{color:#fff}.button .icon,.button-auth .icon,.button-blackish .icon,.button-bulk .icon,.button-gray .icon,.button-green .icon,.button-red .icon,.trans-button .icon{color:#fff;margin-right:.3rem}.trans-button .icon,.trans-button span{color:#050505;-webkit-transition:color .2s linear;transition:color .2s linear}.trans-button.active .icon,.trans-button.active span,.trans-button:hover .icon,.trans-button:hover span{color:#72a114}.trans-button:visited{color:#050505}.submit-button{width:100%}.button-green,a.button-green{background:#72a114}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#9dce0a;color:#fff}.button-gray,a.button-gray{background:#555}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#9dce0a;color:#fff}.button-blackish{background:#050505;color:#f5f5f5}.button-blackish:hover{background:#050505;color:#fff}.button-red{background:#ff8282}.button-red:hover{background:red;color:#fff}.button-red .icon{color:#fff}.button-block{background:#fff;color:red}.button-block:hover{background:#ff8282;color:#fff}.button-bulk{background:#72a114;padding:.35rem .5rem}.button-bulk .icon{margin-right:0}.button-bulk:hover{background:#9dce0a}.button-auth{background:#444}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.card-placeholder{background:#f0f0f0;border:1px dashed #e1e1e1;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:flex}.card-placeholder .image{background:#e1e1e1;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.card-placeholder .line{background:#e1e1e1;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;margin:0}.check{background-color:#dcdcdc;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:500px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.check input+div{background-color:#555;height:25px;-webkit-transition:all .2s linear;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:opensans-regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#9dce0a;margin-left:50%;-webkit-transition:all .2s linear;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.single-filter,.ticket-created-by .created-by .created-title.editable{cursor:pointer}.check input:disabled+div{background-color:#b8b8b8}.ticket-created-by{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;margin-top:.5rem;position:relative}.ticket-created-by .user-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block;line-height:1.5}.ticket-created-by .created-by .created-title{color:#72a114}.ticket-estimation .popover,.ticket-estimation .popover a,.ticket-estimation .popover.fix,.ticket-estimation .popover.fix a,.ticket-estimation .ticket-role-points .role{font-size:.9rem}.ticket-estimation .ticket-role-points .points{font-size:1.6rem}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .points-per-role{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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}.ticket-estimation .ticket-role-points{background:rgba(184,184,184,.1);border-radius:2px;color:rgba(68,68,68,.3);-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:.1rem;padding:.5rem 0 .1rem;position:relative;text-align:center;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .ticket-role-points.active{background:rgba(157,206,10,.9);color:#f5f5f5}.ticket-estimation .ticket-role-points:first-child{background:rgba(68,68,68,.25);border-radius:0;color:#f5f5f5}.ticket-estimation .ticket-role-points:last-child{border:0}.ticket-estimation .ticket-role-points .points{font-family:opensans-regular,Arial,Helvetica,sans-serif;display:block;text-align:center}.ticket-estimation .ticket-role-points .role{max-width:90%;overflow:hidden;display:inline-block;text-align:center}.ticket-estimation .popover{background:#050505;color:#fff;display:none;left:35%;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#050505;content:'';height:10px;left:10px;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#9dce0a;color:#fff}.ticket-estimation .popover.fix{background:#050505;color:#fff;display:none;left:-160px;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover.fix a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#050505;content:'';height:10px;left:90%;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.single-filter{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem;opacity:.5;position:relative}.single-filter:after{clear:both;content:'';display:table}.single-filter.active,.single-filter.selected,.single-filter:hover{color:#444;opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{background:#dcdcdc;display:block;width:100%}.single-filter .number{background:#c2c2c2;position:absolute;right:0;top:0}.single-filter .icon-delete{color:#444;position:absolute;right:.5rem;top:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.single-filter .icon-delete:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task .avatar a,.kanban-task .task-text,.kanban-task-maximized .task-archived p,.kanban-task-maximized .task-points,.kanban-task-minimized .task-archived{font-size:.9rem}.kanban-task-minimized .icon-drag-h{font-size:1rem}.kanban-task .icon-drag-h,.kanban-task .icon-edit{font-size:1.2rem}.kanban-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.kanban-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.kanban-task:last-child{margin-bottom:0}.kanban-task:hover .icon-drag-h,.kanban-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.kanban-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.kanban-task.ui-sortable-placeholder{background:#444}.kanban-task.blocked{background:red;border:1px solid #c00;color:#fff}.kanban-task.blocked a,.kanban-task.blocked span{color:#fff}.kanban-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.kanban-task .kanban-tagline{border-color:#f1e8cd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:.6rem}.kanban-task .kanban-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.kanban-task .kanban-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.kanban-task .avatar-wrapper{-webkit-flex-basis:55px;-ms-flex-preferred-size:55px;flex-basis:55px;-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;width:55px}.kanban-task .avatar-wrapper img{width:100%}.kanban-task .avatar a{text-align:center}.kanban-task .avatar img{margin:0 auto}.kanban-task .avatar img:hover{border:2px solid #72a114;-webkit-transition:border .3s linear;transition:border .3s linear}.kanban-task .task-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 .5rem 0 .8rem}.kanban-task .task-assigned{color:#cfc29b;display:block}.kanban-task .task-num{color:#444;margin-right:.3rem}.kanban-task .loading{bottom:.5rem;position:absolute}.kanban-task .icon-drag-h,.kanban-task .icon-edit{color:#f1e8cd;opacity:0;position:absolute;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.kanban-task .icon-drag-h:hover,.kanban-task .icon-edit:hover{color:#e0cd91;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task-maximized .task-archived{background:#e8e8e8;padding:.5rem;text-align:left;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived:hover{background:#e1e1e1;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-maximized .task-archived span{color:#b8b8b8}.kanban-task-maximized .task-archived p{color:#b8b8b8;margin:0}.kanban-task-maximized .task-archived p:last-child{color:#555;margin:.5rem 0;text-align:center}.kanban-task-maximized .icon-edit,.kanban-task-maximized .loading{bottom:.2rem;right:.5rem}.kanban-task-maximized .icon-drag-h{font-size:2rem;bottom:.2rem;cursor:move;right:45%}.kanban-task-maximized .task-points{color:#e0cd91;margin:0}.kanban-task-maximized .task-points span{display:inline-block}.kanban-task-maximized .task-points span:first-child{padding-right:.2rem}.kanban-task-maximized .task-points .points-text{text-transform:lowercase}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{line-height:1.4;text-transform:none}.kanban-task-maximized .kanban-tag{border-top:.3rem solid}.kanban-task-minimized .kanban-task-inner{padding:0 .3rem}.kanban-task-minimized .task-archived{background:#e8e8e8;padding:.3rem;text-align:left}.kanban-task-minimized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-minimized .task-archived span{color:#b8b8b8}.kanban-task-minimized .task-archived .task-name{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-itemtype-project .icon svg,.list-itemtype-ticket .icon svg,.list-itemtype-timeline .icon svg,.list-itemtype-user .icon svg,.loading-spinner{max-height:1rem;max-width:1rem}.kanban-task-minimized .task-archived p{color:#b8b8b8;margin:0}.kanban-task-minimized .task-archived p:last-child{display:none}.kanban-task-minimized .task-num{vertical-align:top}.kanban-task-minimized .task-name{display:inline-block;overflow:hidden;width:135px}.kanban-task-minimized .task-points{display:none}.kanban-task-minimized .icon-drag-h,.kanban-task-minimized .icon-edit{top:1.4rem}.kanban-task-minimized .icon-edit{bottom:.2rem;right:1rem}.kanban-task-minimized .icon-drag-h{cursor:move;right:.1rem;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-task-minimized .kanban-tag{border-top:.2rem solid}.level{background-color:#b8b8b8;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project .list-itemtype-track,.list-itemtype-ticket .list-itemtype-track,.list-itemtype-timeline .list-itemtype-track,.list-itemtype-user .extra-info,.list-itemtype-user .list-itemtype-track{font-size:.9rem}.list-itemtype-ticket h2{font-size:1rem}.list-itemtype-project h2,.list-itemtype-user h2,.loader p{font-size:1.2rem}.list-itemtype-project p,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{font-family:opensans-regular,Arial,Helvetica,sans-serif}.list-itemtype-project{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-project h2,.list-itemtype-project p{margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-project-members,.list-itemtype-project .list-itemtype-project-tags{-webkit-align-self:flex-end;-ms-flex-item-align:end;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .list-itemtype-project-members{align-self:flex-end;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-project .list-itemtype-project-tags{align-self:flex-end;display:flex;-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5rem}.list-itemtype-project .tag{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket h2,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user h2,.list-itemtype-user p{margin-bottom:0}.list-itemtype-ticket,.list-itemtype-timeline,.list-itemtype-user{border-bottom:1px solid #f5f5f5;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user,.list-itemtype-user .list-itemtype-track{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-ticket .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .list-itemtype-avatar img{width:100%}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-project{color:#b8b8b8}.list-itemtype-ticket .list-itemtype-ticket-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-id{color:#b8b8b8;margin-right:.3rem}.list-itemtype-user{display:flex}.list-itemtype-user .list-itemtype-track{color:#b8b8b8;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-user .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .list-itemtype-avatar img{width:100%}.list-itemtype-user .extra-info{margin-top:.25rem}.list-itemtype-timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-timeline .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-timeline .list-itemtype-track-likers,.list-itemtype-timeline .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track-likers .icon,.list-itemtype-timeline .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-timeline .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-timeline .list-itemtype-track-likers.active,.list-itemtype-timeline .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-timeline h2{margin-bottom:0}.admin-menu li,.empty-backlog .title,.empty-burndown .title,.sprints-empty .title,.taskboard-table-header .task-colum-name,.ticket-data .ticket-title,.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,tg-project-menu{text-transform:uppercase}.list-itemtype-timeline .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.loader p{color:#555;text-align:center}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar,.notification-light{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.loading-bar{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:loadBar;animation-name:loadBar;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;background:#555;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{-webkit-animation-delay:0s;animation-delay:0s;background:#bbe831}.loading-bar .item-1{-webkit-animation-delay:1s;animation-delay:1s;background:#237400}.loading-bar .item-2{-webkit-animation-delay:2s;animation-delay:2s;background:#e43050}.loading-bar .item-3{-webkit-animation-delay:3s;animation-delay:3s;background:#810061}.loading-bar .item-4{-webkit-animation-delay:4s;animation-delay:4s;background:#618000}.loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}a.help-button,a.help-markdown{font-size:.9rem;color:#b8b8b8}a.help-button:hover span,a.help-markdown:hover span{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button:hover .icon,a.help-markdown:hover .icon{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button .icon,a.help-markdown .icon{color:#b8b8b8;margin-right:.2rem}.markItUpHeader ul{background:#f5f5f5;padding:.3rem}.markItUpHeader ul li{display:inline-block;float:none}.markItUpHeader ul li a{opacity:.8}.markItUpHeader ul li a:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.markItUpHeader ul .preview-icon{position:absolute;right:2.5rem}.markItUpContainer{padding:0}.markdown{position:relative}.preview .actions{background:#f5f5f5;margin-top:.5rem;min-height:2rem;padding:.3rem}.notification-light p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.notification-message-success .warning{font-size:1.2rem;color:#fff;line-height:1.2}.notification-message-error .warning{font-size:2rem;color:#fff;line-height:2.4rem}.notification-message-error .icon-notification-error{font-size:3rem;display:inline;vertical-align:sub}.notification-message-error .warning,.notification-message-success .warning{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.notification-message-success{background:rgba(157,206,10,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);opacity:1;right:-370px;top:2%;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{-webkit-animation:animSlide 2s linear both;animation:animSlide 2s linear both;opacity:1}.notification-message-success p{margin:0}@-webkit-keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-light,.notification-message-error{-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%)}.notification-message-error{background:rgba(255,0,0,.9);top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error.inactive{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-light p,.notification-message-error .text p{margin:0}.notification-message-error .icon-delete{color:#fff;position:absolute;right:1rem;top:1rem}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(184,184,184,.95);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;padding:1rem;position:absolute;top:0;transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s;width:100%;z-index:99999}.paginator ul,.summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.notification-light.inactive{opacity:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s}.notification-light.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s;transition:all .6s}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{margin-right:1rem;width:2rem}.notification-light .close path{fill:#fff}.notification-message-light-error{background:rgba(255,0,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator .dots,.paginator a{background:#b8b8b8;color:#fff;padding:.5rem 1rem;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator a:hover{background:#050505;color:#fff;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .active span{background:#9dce0a}.paginator .dots{background:0 0;color:#b8b8b8}.v-pagination-list{overflow:hidden}.v-pagination-next,.v-pagination-previous{background-color:#555;color:#f5f5f5;display:block;padding:.1rem 0;text-align:center;visibility:hidden;width:100%}.select-color,.select-color:after{background:#050505;position:absolute}.v-pagination-next:hover,.v-pagination-previous:hover{background-color:#050505;-webkit-transition:background .3s linear;transition:background .3s linear}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.private{display:inline-block;margin-left:.5rem;width:.5rem}.private svg{height:.5rem;width:.5rem}.private path{fill:#b8b8b8;-webkit-transition:fill .3s linear;transition:fill .3s linear}.select-color,.select-color a{font-size:.9rem}.select-color input{font-size:1rem}.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;border-radius:0 10px 10px 0;padding:15px}.select-color a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#b8b8b8;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background-color:#f5f5f5;width:243px}.select-color input::-webkit-input-placeholder{color:#555}.select-color input::-moz-placeholder{color:#555}.select-color input:-moz-placeholder{color:#555}.select-color input:-ms-input-placeholder{color:#555}.select-color .selected-color{background:#b8b8b8;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary .description{font-size:.9rem}.empty-burndown .title{font-size:1.2rem}.empty-burndown,.empty-burndown .title,.summary .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.empty-burndown a,.summary .number{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.summary{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;padding:1em}.summary .summary-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#9dce0a}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{line-height:1}.summary .stats{cursor:pointer;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .color-line,.summary .stats:hover .graph{fill:#9dce0a;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats.active .color-line,.summary .stats.active .white-line{display:none}.summary .stats.active .graph{fill:#72a114}.summary .stats svg{height:100%;width:100%}.summary .stats .color-line,.summary .stats .graph{fill:#858585;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats .white-line{fill:#444}.summary .stats .color-line,.summary .stats .white-line{display:block}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#9dce0a;height:24px}.summary-progress-bar .defined-points{background:#ff8282;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#9dce0a;height:24px;position:absolute}.large-summary{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.large-summary .large-summary-wrapper{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.large-summary .summary-progress-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.empty-burndown,.taskboard-task .taskboard-tagline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.large-summary .summary-progress-bar{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats-divider{margin-right:2rem}.large-summary .icon{font-size:1.4rem;margin-right:.4rem}.large-summary .icon.icon-stats{color:#72a114;float:right;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#9dce0a}.large-summary .icon.icon-stats.active:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.empty-burndown{-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;background:rgba(135,155,137,.15);display:flex;-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;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{-webkit-flex-basis:5rem;-ms-flex-preferred-size:5rem;flex-basis:5rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;width:5rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.empty-burndown .title{color:#879b89;margin:0}.empty-burndown path{fill:#879b89}.empty-burndown a{-webkit-animation:blink 2s infinite;animation:blink 2s infinite}.graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.wysiwyg,.wysiwyg .codehilite{overflow:auto}.graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;-webkit-transition:none;transition:none}.tag,.tags-block .add-tag-text,.tags-block .tag{font-size:.9rem}.tags-block .icon-plus{font-size:1.2rem}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-radius:0 5px 5px 0;color:#444;display:inline-block;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.tag .icon-delete{color:#b8b8b8;margin-left:1rem}.tag .icon-delete:hover{color:red}.ui-autocomplete{background:#fff;border:1px solid #b8b8b8;z-index:99910}.ui-autocomplete .ui-state-focus{background:#9dce0a}.ui-autocomplete li{cursor:pointer}.ui-helper-hidden-accessible{display:none}.tags-block .tags-container{display:inline-block}.tags-block input{padding:.4rem;width:14rem}.tags-block .tag{margin:0 .5rem .5rem 0;padding:.5rem}.tags-block .add-tag{color:#b8b8b8}.tags-block .add-tag:hover{color:#9dce0a}.taskboard-task .task-assigned,.taskboard-task .taskboard-text,.taskboard-task .taskboard-user-avatar a{font-size:.9rem}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit,.taskboard-task .icon-iocaine{font-size:1.2rem}.taskboard-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.taskboard-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.taskboard-task:hover .icon-drag-h,.taskboard-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.taskboard-task.ui-sortable-placeholder{background:#444}.taskboard-task.blocked{background:red;border:1px solid #c00;color:#fff}.taskboard-task.blocked a,.taskboard-task.blocked span,.taskboard-task.blocked:hover .icon-drag-h,.taskboard-task.blocked:hover .icon-edit{color:#fff}.taskboard-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.taskboard-task .taskboard-tagline{border-color:#f1e8cd;display:flex;height:.6rem}.taskboard-task .taskboard-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.taskboard-task .taskboard-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.taskboard-task .taskboard-user-avatar{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:55px}.taskboard-task .taskboard-user-avatar a{display:block;text-align:center}.taskboard-task .taskboard-user-avatar img{margin:0 auto}.taskboard-task .taskboard-user-avatar img:hover{border:2px solid #72a114;-webkit-transition:border .3s linear;transition:border .3s linear}.taskboard-task .iocaine img{-webkit-filter:hue-rotate(150deg) saturate(200%);filter:hue-rotate(150deg) saturate(200%)}.taskboard-task .icon-iocaine{background:#000;border-radius:5px;color:#fff;left:.2rem;padding:.1rem;position:absolute;top:1rem}.taskboard-task .task-assigned{color:#cfc29b;display:block}.taskboard-task .task-assigned:hover{color:#72a114}.taskboard-task .task-num{color:#444;margin-right:.5em}.taskboard-task .taskboard-text{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;padding:0 .5rem 0 1rem;word-wrap:break-word}.taskboard-task .icon{-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task .loading{bottom:.5rem;position:absolute}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit{bottom:.5rem;color:#f1e8cd;opacity:0;position:absolute}.taskboard-task .icon-drag-h:hover,.taskboard-task .icon-edit:hover{color:#cfc29b}.taskboard-task .icon-edit,.taskboard-task .loading{right:1rem}.taskboard-task .icon-drag-h{font-size:2rem;cursor:move;right:45%}.task-drag{box-shadow:1px 1px 15px 6px rgba(0,0,0,.1)}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.track-button .track-inner{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border-radius:4px 0 0 4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;margin-right:.1rem;min-width:140px}.track-button .track-button-counter,.watch-options a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.track-button .track-inner:hover{background:#e8e8e8;-webkit-transition:background .3s;transition:background .3s}.track-button .track-inner span{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.track-button .track-inner .icon-arrow-up{margin-left:auto;padding:0 .5rem;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.track-button:hover{color:#050505}.track-button.active .track-inner{background:rgba(157,206,10,.2)}.track-button.active .track-icon path{fill:#72a114}.track-button.watch-container{margin-right:1rem;position:relative}.track-button .track-icon{padding:.3rem .6rem .3rem .75rem}.track-button .track-icon svg{height:1.1rem;position:relative;top:2px;width:1.1rem}.track-button .track-icon path{fill:#444}.track-button .track-button-counter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-width:2rem}.like-button.active.is-hover .track-inner,.watch-button.active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.like-button.active.is-hover path,.watch-button.active.is-hover path{fill:#ff8282}.watch-options{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.admin-project-export-result .spin img,.ticket-assigned-to .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.watch-options li{margin:0}.assigned-to-list,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid rgba(184,184,184,.3);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.watch-options a.active{color:#9dce0a}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check path{fill:#9dce0a}.upvote-btn{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#b8b8b8;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#879b89;-webkit-transition:background .3s;transition:background .3s}.upvote-btn a:hover path{fill:#879b89}.upvote-btn a.active{background:rgba(157,206,10,.2);color:#72a114;-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.active path{fill:#72a114}.upvote-btn a.is-hover{background:red;color:#f5f5f5}.upvote-btn a.is-hover svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover path{fill:#ff8282}.upvote-btn svg{height:1rem;width:1rem}.upvote-btn span{display:block}.upvote-btn path{fill:#b8b8b8}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#444;margin-left:.5rem}.assigned-to-list .user-list-single,.ticket-watchers .user-list-single{-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;background:0 0;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem .5rem .3rem;vertical-align:middle}.assigned-to-list .user-list-single:last-child,.ticket-watchers .user-list-single:last-child{border:0}.assigned-to-list .user-list-avatar,.ticket-watchers .user-list-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.assigned-to-list .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{background:#edfad4;cursor:pointer;margin-bottom:1rem;position:relative;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.1s;transition-delay:.1s}.assigned-to-list .user-list-single.is-active .icon-delete{opacity:1;position:absolute;right:1rem;top:1.3rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-single:hover .icon-delete{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.ticket-watchers .icon-delete{opacity:0;position:absolute;right:.5rem;top:0;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.ticket-watchers .icon-delete:hover{color:red;-webkit-transition:color .3s ease-in;transition:color .3s ease-in}.wysiwyg code,.wysiwyg pre{font-size:.9rem}.wysiwyg h2{font-size:1.2rem;margin-bottom:.5rem}.wysiwyg h1{font-size:2rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.wysiwyg h2,.wysiwyg h3{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.wysiwyg{line-height:1.4rem;padding:1rem}.wysiwyg h1{line-height:2.5rem}.wysiwyg ol,.wysiwyg ul{list-style-position:outside;margin-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#72a114}.wysiwyg a:hover{color:#9dce0a}.wysiwyg p{line-height:1.4rem;margin-bottom:1rem}.wysiwyg code,.wysiwyg pre{background:#5e5e5e;color:#f5f5f5;direction:ltr;font-family:'courier new',monospace;margin-bottom:1rem;overflow:auto;unicode-bidi:embed;white-space:pre}.admin-functionalities .functionality .title,.admin-membership-table .avatar .name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-membership-table .avatar figcaption span,.admin-submenu ul a span,.admin-submenu-roles .single-role,.admin-webhooks .webhook-url span,.custom-fields-table .custom-description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wysiwyg pre{line-height:1.4rem;padding:.5rem}.wysiwyg table{border:1px solid #b8b8b8;margin-bottom:1rem}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#b8b8b8 1px solid}.wysiwyg th{border-right:#b8b8b8 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#b8b8b8 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#b8b8b8;margin-bottom:2rem}.admin-common .total{font-size:1.2rem;background-color:#f5f5f5;color:#444;padding:.3rem 1rem}.admin-common .total:hover .edit-value{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0;padding:.5rem 0}.custom-fields-table .table-header{border-bottom:3px solid #f5f5f5}.custom-fields-table .table-header .custom-description span,.custom-fields-table .table-header .custom-name span{padding-left:1.1rem}.custom-fields-table .table-body form:last-child .row{border:0}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;-webkit-transition:background .2s linear;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag-v{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .table-body .custom-description{color:#b8b8b8}.custom-fields-table .single-custom-field{border-bottom:1px solid #f5f5f5;color:#555}.custom-fields-table .icon-drag-v{color:#b8b8b8;opacity:0;padding:0 .1rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .icon-drag-v:hover{color:#555;cursor:move;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{color:#555;margin-right:.5rem}.custom-fields-table .custom-name{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-description{max-width:100%;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.custom-fields-table .custom-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-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;opacity:0;text-align:center}.custom-fields-table .custom-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-fields-table form .custom-options-wrapper{opacity:1}.admin-functionalities form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.admin-functionalities .functionality{-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;background-color:#f5f5f5;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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.3rem;margin-right:.3rem;opacity:.5;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:top;width:32%}.admin-functionalities .functionality.active{background-color:rgba(114,161,20,.3);opacity:1}.admin-functionalities .functionality .icon{font-size:3rem;-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;margin:0 auto;min-width:60px}.admin-functionalities .functionality .desc{text-align:center;width:100%}.admin-functionalities .functionality .activate-input{display:none}.admin-functionalities .functionality .activate-input+label{color:#fff;cursor:pointer;display:block;text-align:center}.admin-functionalities .functionality .title{display:block}.admin-functionalities .functionality select{margin-top:1rem}.admin-functionalities .videoconference-attributes select{margin-bottom:.5rem}.admin-functionalities .button-green{color:#fff;display:block;text-align:center}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.admin-membership-table .avatar figcaption{margin-left:1rem;width:75%}.admin-membership-table .avatar figcaption span{width:100%}.admin-membership-table .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:35px}.admin-membership-table .avatar .email,.admin-membership-table .avatar .name{display:block;width:100%}.admin-membership-table .avatar .email{color:#b8b8b8}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#f5f5f5}.admin-membership-table .resend{background-color:#72a114;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;-webkit-transition:background-color .3s linear;transition:background-color .3s linear}.admin-membership-table .delete{font-size:1.2rem;color:#b8b8b8}.admin-membership-table .delete:hover{color:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.admin-menu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #dcdcdc}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-result .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{width:100%}.admin-project-export-result h3{font-size:1.2rem;font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#b8b8b8;margin:.5rem 0;text-align:center}.project-details .privacy-settings label,.project-details input,.project-details label,.project-details textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.project-details form{max-width:700px;width:100%}.project-details fieldset{margin-bottom:1rem}.project-details label{display:block;margin-bottom:.2rem}.project-details textarea{height:10rem}.project-details .privacy-settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.project-details .privacy-settings>div{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;position:relative}.project-details .privacy-settings>div:first-child{margin-right:.5rem}.project-details .privacy-settings label{border:1px solid #b8b8b8;cursor:not-allowed;display:block;text-align:center;-webkit-transition:all .2s linear;transition:all .2s linear}.project-details .privacy-settings label span{color:#b8b8b8}.project-details .privacy-project{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.project-details .privacy-project:checked+label{background:#9dce0a;border:1px solid #9dce0a}.project-details .privacy-project:checked+label span{color:#fff}.project-details .button-green{color:#fff;display:block;text-align:center}.project-details .delete-project{font-size:.9rem;display:block;margin-top:1rem}.admin-roles .general-category{font-size:.9rem}.admin-roles .edit-value{font-size:1rem}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-roles .edit-value{color:#b8b8b8;cursor:pointer;margin-left:.5rem;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-roles .edit-role{background-color:#f5f5f5;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .edit-role .icon-floppy{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .edit-role .icon-floppy:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;display:inline-block}.admin-submenu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.admin-contrib .help .alt-image,.admin-contrib .help code,.admin-contrib .select-input-text .help-copy,.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-body span,.admin-webhooks .history-single-response-header a{font-size:.9rem}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a span{display:block;max-width:85%}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child,.admin-webhooks .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body .response-container,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-webhooks .table-header{border-bottom:1px solid #b8b8b8}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #f5f5f5}.admin-webhooks .webhooks-options{margin-bottom:1rem;text-align:right}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.admin-webhooks .webhook-url{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.admin-webhooks .webhook-url span{max-width:65%;color:#b8b8b8;display:inline-block;vertical-align:middle}.admin-contrib .help code,.admin-third-parties .help code{direction:ltr;line-height:1.4rem;unicode-bidi:embed;white-space:pre}.admin-webhooks .webhook-url a{color:#72a114;margin-left:.5rem}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;min-width:100px;text-align:center}.admin-webhooks .webhook-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.admin-webhooks .webhook-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .webhooks-history.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #f5f5f5;margin-left:22%}.admin-webhooks .history-single{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header a,.admin-webhooks .history-single-response-header span:first-child{color:#b8b8b8}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{-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;background:#f5f5f5;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-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.backlog-table-body,.backlog-table-header,.kanban-table,.taskboard-table,.wiki-summary .wiki-user-modification{-webkit-box-orient:vertical;-webkit-box-direction:normal}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{color:#b8b8b8;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{border:0;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib h2,.admin-contrib label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.admin-contrib .help h3,.admin-contrib .help ol span{font-family:opensans-semibold}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #f5f5f5;margin-bottom:1rem;padding-bottom:1rem}.admin-contrib .contrib-input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.admin-contrib .contrib-test{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:7.5rem;-ms-flex-preferred-size:7.5rem;flex-basis:7.5rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-left:.5rem;text-align:center}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .contrib-form-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-contrib .select-input-text .help-copy{opacity:0}.admin-contrib .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-contrib .check-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0}.admin-contrib .help{margin-top:2rem}.admin-contrib .help h3{margin-bottom:1rem}.admin-contrib .help ol{padding:0 0 0 2rem}.admin-contrib .help .img{margin-bottom:1rem}.admin-contrib .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-contrib .help .code-info{padding-left:1rem}.admin-contrib .help .code-info li{margin-bottom:.5rem}.admin-contrib .help .code-info span{font-family:opensans-semibold}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv .csv-regenerate-field a{font-size:.9rem;min-width:110px}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field .icon{margin-right:.3rem}.project-csv .field-with-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:1rem;width:100%}.project-csv .field-with-options input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row .icon,.project-values-settings a{font-size:1.2rem}.admin-third-parties .help .alt-image,.admin-third-parties .help code,.admin-third-parties .select-input-text .help-copy,.backlog-table-body .doom-line span,.backlog-table-body .pop-points,.backlog-table-body .pop-points a,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open a,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-body .pop-role,.backlog-table-body .pop-role a,.backlog-table-body .pop-status,.backlog-table-body .pop-status a,.backlog-table-body .row,.backlog-table-body .tags-block .tag,.backlog-table-header .pop-points,.backlog-table-header .pop-points a,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open a,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom a,.backlog-table-header .pop-role,.backlog-table-header .pop-role a,.backlog-table-header .pop-status,.backlog-table-header .pop-status a,.backlog-table-header .row,.login-form-container .forgot-pass,.register-form-container .register-text{font-size:.9rem}.project-values-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{color:#b8b8b8;opacity:0}.project-values-row .icon:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.project-values-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #f5f5f5}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-header .points,.login-form-container .remember-me+label{cursor:pointer}.project-values-body .project-values-row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.project-values-name{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.project-values-value{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{color:#555;margin-right:.5rem}.project-values-settings a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.project-values-settings a:hover .icon-delete{color:red}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.admin-third-parties .help h3,.admin-third-parties .help ol span{font-family:opensans-semibold}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p,.change-password-text{color:#444;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-third-parties .help{margin-top:2rem}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties .help h3{margin-bottom:1rem}.admin-third-parties .help ol{padding:0 0 0 2rem}.admin-third-parties .help .img{margin-bottom:1rem}.admin-third-parties .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-third-parties .help .code-info li,.cancel-account p{margin-bottom:.5rem}.admin-third-parties .help .code-info{padding-left:1rem}.admin-third-parties .help .code-info span{font-family:opensans-semibold}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-email-form p{margin-bottom:.5rem}.change-password-form-container .token-change-password{position:relative}.change-password-form-container input:focus+.get-token{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.change-password-form-container .get-token{font-size:.9rem;color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.change-password-form-container .get-token:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.login-form-container .forgot-pass{color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;-webkit-transition:all .3s linear;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.login-form-container .remember-me{vertical-align:top}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin-bottom:1rem;text-align:center}.backlog-table-header .backlog-table-title{font-size:1rem}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a,.empty-backlog .title{font-size:1.2rem}.backlog-table-body .doom-line span{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.backlog-table-body .pop-points,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-body .user-story-name a,.backlog-table-header .pop-points,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-role,.backlog-table-header .pop-status,.empty-backlog{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.backlog-table-body,.backlog-table-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-subtitle:hover,.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-subtitle:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-subtitle .input,.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-subtitle .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-webkit-flex-basis:25px;-ms-flex-preferred-size:25px;flex-basis:25px;-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}.backlog-table-body .backlog-table-subtitle .votes,.backlog-table-body .backlog-table-title .votes,.backlog-table-body .row .votes,.backlog-table-header .backlog-table-subtitle .votes,.backlog-table-header .backlog-table-title .votes,.backlog-table-header .row .votes{color:#555;-webkit-flex-basis:65px;-ms-flex-preferred-size:65px;flex-basis:65px;-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-align:center}.backlog-table-body .backlog-table-subtitle .votes.inactive,.backlog-table-body .backlog-table-title .votes.inactive,.backlog-table-body .row .votes.inactive,.backlog-table-header .backlog-table-subtitle .votes.inactive,.backlog-table-header .backlog-table-title .votes.inactive,.backlog-table-header .row .votes.inactive{color:#b8b8b8}.backlog-table-body .backlog-table-subtitle .votes.is-voted,.backlog-table-body .backlog-table-title .votes.is-voted,.backlog-table-body .row .votes.is-voted,.backlog-table-header .backlog-table-subtitle .votes.is-voted,.backlog-table-header .backlog-table-title .votes.is-voted,.backlog-table-header .row .votes.is-voted{color:#9dce0a}.backlog-table-body .backlog-table-subtitle .user-stories,.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-subtitle .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{overflow:hidden;width:100%}.backlog-table-body .backlog-table-subtitle .status,.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-subtitle .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-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}.backlog-table-body .backlog-table-subtitle .points,.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-subtitle .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-webkit-flex-basis:125px;-ms-flex-preferred-size:125px;flex-basis:125px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point,.empty-backlog,.sprints .loading,.sprints .sprint-table .sprint-empty{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{color:#b8b8b8;margin-left:.2rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px 3rem 10px 10px;position:absolute;width:150px;z-index:99}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{background:#050505;bottom:0;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:auto;width:200px;z-index:99}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .user-story-name,.sprints .sprint-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:opensans-regular,Arial,Helvetica,sans-serif;border-bottom:2px solid #b8b8b8;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:30px}.backlog-table-header .header-points span{color:#b8b8b8}.backlog-table-body .row{border-bottom:1px solid #ebebeb;cursor:move;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in;-webkit-transition-delay:.2s;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag-v,.backlog-table-body .row:hover .us-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .is-checked,.backlog-table-body .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.backlog-table-body .user-story-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .doom-line{background:red;margin:.2rem 0;padding:.6rem 0;position:relative;width:100%}.backlog-table-body .doom-line span{color:#fff;position:absolute;right:.5rem;top:-3px}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in;width:30px}.backlog-table-body .icon-drag-v:hover,.backlog-table-body .us-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .us-settings{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 0 0 2rem;opacity:0}.backlog-table-body .icon-drag-v{cursor:move;opacity:0;padding:.1rem .5rem 0 0}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.empty-backlog{padding:2rem}.empty-backlog img{margin-bottom:1rem}.empty-backlog .title{margin-bottom:.5rem}.empty-backlog a{color:#72a114}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint .description{font-size:.75rem}.sprints .filter-closed-sprints,.sprints .sprint-table .column-us,.sprints .us-item-row .user-story-name{font-size:.9rem}.sprints .sprint .number,.sprints .sprint .sprint-date,.sprints .sprint-name a,.sprints-empty .title{font-size:1.2rem}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint-header{-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;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#72a114;padding:.25rem .25rem 0;-webkit-transition:background .2s;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{height:1.4rem;width:1.5rem}.sprints .add-sprint path{fill:#f5f5f5}.sprints .filter-closed-sprints{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading-spinner{border:0;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.sprints .sprint-name a{max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;margin-right:3px}.sprints .sprint{margin-bottom:2rem;overflow:hidden}.sprints .sprint header{position:relative}.sprints .sprint:hover .icon-edit{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.sprints .sprint .icon{display:inline-block}.sprints .sprint .icon-arrow-up{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:baseline}.sprints .sprint .icon-arrow-up.active{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.sprints .sprint .icon-arrow-up:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.sprints .sprint .icon-edit{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;vertical-align:baseline}.sprints .sprint .icon-edit:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.sprints .sprint .description{line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{color:#b8b8b8;-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1}.sprints .sprint .sprint-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.sprints .sprint ul{margin:0}.sprints .sprint li{display:inline-block}.sprints .sprint li:first-child{margin-right:3px}.sprints .sprint-progress-bar{background:#b8b8b8;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#72a114;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table .sprint-empty{background:#e6e6e6;border:2px dashed #d2d2d2;color:#555;padding:1rem}.sprints .sprint-table .row{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:#d7d7d7;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .row.readonly,.taskboard-table .taskboard-task.readonly{cursor:auto}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.sortable-placeholder{background:#d7d7d7;height:40px}.sprints .sprint-table .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .column-us{-webkit-flex-flow:3;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.sprints .sprint-table .us-name.closed{color:#c5c5c5}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#c5c5c5}.sprints .sprint-table .column-points.blocked{color:red}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .icon-drag-v,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input,.taskboard-table-body .column-fold .taskboard-task .icon,.taskboard-table-body .column-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .column-fold .taskboard-task .taskboard-text,.taskboard-table-body .row-fold .taskboard-task .icon,.taskboard-table-body .row-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .row-fold .taskboard-task .taskboard-text{display:none}.sprints .us-item-row .user-story-name{line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#b8b8b8}.sprints-empty a,.taskboard-table-header .task-colum-name .icon:hover{color:#72a114}.sprint-closed .sprint-progress-bar .current-progress{background:#9f9f9f}.sprint-closed .button-gray{background:#b8b8b8}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{margin-bottom:.5rem}.taskboard-userstory-box .points-value{font-size:.9rem}.taskboard-table-header .task-colum-name .icon{font-size:1rem}.taskboard-table-header .task-colum-name,.taskboard-userstory-box .us-title{font-size:1.2rem}.taskboard-table-body .column-fold .taskboard-task,.taskboard-table-body .row-fold .taskboard-task{background:0 0;border:0;margin:0;min-height:0}.taskboard-table-body .column-fold .taskboard-task .taskboard-task-inner,.taskboard-table-body .row-fold .taskboard-task .taskboard-task-inner{padding:.2rem}.taskboard-table-body .column-fold .taskboard-task .avatar,.taskboard-table-body .row-fold .taskboard-task .avatar{height:35px;width:35px}.taskboard-table-body .column-fold .taskboard-task.ui-sortable-helper,.taskboard-table-body .row-fold .taskboard-task.ui-sortable-helper{box-shadow:none}.taskboard-table-body .column-fold .task-column,.taskboard-table-body .row-fold .task-column,.taskboard-table-body .task-column.column-fold,.taskboard-table-body .task-column.row-fold{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;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-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link,.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table,.taskboard-table-header .taskboard-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;overflow:hidden}.taskboard-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%}.taskboard-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:flex;position:absolute}.taskboard-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;width:300px}.taskboard-table-header .task-colum-name:last-child{margin-right:0}.taskboard-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-header .task-colum-name .icon.hfold,.taskboard-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.taskboard-table-header .task-colum-name.column-fold{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table-header .task-colum-name.column-fold span{display:none}.taskboard-table-header .task-colum-name.column-fold .hfold,.taskboard-table-header .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table-body{height:100%;overflow:auto;width:100%}.taskboard-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 10px 0 0;max-width:300px;width:300px}.taskboard-table-body .task-column:last-child{margin-right:0}.taskboard-table-body .column-fold .taskboard-task{max-width:40px;width:40px}.taskboard-table-body .task-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;min-height:10rem;width:100%}.taskboard-table-body .avatar-task-link,.taskboard-table-body .task-row.row-fold .icon-bulk,.taskboard-table-body .task-row.row-fold .icon-plus,.taskboard-table-body .task-row.row-fold .points-value{display:none}.taskboard-table-body .task-row:hover .new-task{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.taskboard-table-body .task-row.blocked .taskboard-userstory-box{background:rgba(255,0,0,.6)}.taskboard-table-body .task-row.blocked .points-value,.taskboard-table-body .task-row.blocked .points-value:hover,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a:hover{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.taskboard-table-body .task-row.blocked .taskboard-tasks-box{background:rgba(255,0,0,.1)}.taskboard-table-body .task-row.row-fold{min-height:0}.taskboard-table-body .task-row.row-fold .us-title{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskboard-table-body .taskboard-userstory-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-table-body .taskboard-userstory-box .icon{color:#b8b8b8;position:absolute;right:.5rem;top:.7rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-body .taskboard-userstory-box .icon:hover{color:#72a114}.taskboard-table-body .taskboard-userstory-box .icon.icon-plus{right:2rem}.taskboard-table-body .taskboard-userstory-box .icon.icon-vfold,.taskboard-table-body .taskboard-userstory-box .icon.icon-vunfold{left:0;right:inherit}.taskboard-table-body .avatar-assigned-to{display:block}.taskboard-userstory-box{position:relative}.taskboard-userstory-box .tag-list{display:none;margin-bottom:1rem}.attachments-header,.ticket-assigned-to{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.taskboard-userstory-box .us-title{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-userstory-box .points-value{color:#b8b8b8}.taskboard-userstory-box .points-value span{margin-right:.1rem}.points-list a{color:#72a114;margin-left:.5rem}.points-list a:hover span{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.points-list span{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem}.ticket-assigned-to{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;margin-bottom:1rem;position:relative}.ticket-assigned-to:hover .assigned-to .icon-delete{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;margin:1rem auto;max-height:2rem;max-width:2rem}.attachments,.duty-custom-fields{margin-bottom:2rem}.ticket-assigned-to .user-avatar{-webkit-flex-basis:4rem;-ms-flex-preferred-size:4rem;flex-basis:4rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .assigned-to{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.attachments-header .attachments-title,.colors-table .table-header,.single-attachment .attachment-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.ticket-assigned-to .assigned-to .user-assigned{font-size:1.2rem;color:#72a114;cursor:default;line-height:1.5rem}.ticket-assigned-to .assigned-to .user-assigned.editable{cursor:pointer}.ticket-assigned-to .assigned-to .user-assigned .icon{vertical-align:middle}.ticket-assigned-to .assigned-to .assigned-name{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ticket-assigned-to .assigned-to .icon-delete{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0}.ticket-assigned-to .assigned-to .icon-delete:hover{color:red}.add-attach span,.more-attachments,.single-attachment,.single-attachment .editable-attachment-comment{font-size:.9rem}.attachments-header .attachments-title{font-size:1rem;color:#444}.attachments-header .icon,.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings,.single-attachment .icon-delete{font-size:1.2rem}.attachments-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.attachments-header .attachments-num,.attachments-header .attachments-text{margin-right:.1rem}.attachments-header .icon{color:#444;cursor:pointer}.attachments-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.single-attachment{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem 1rem;position:relative}.category-config,.more-attachments{border-bottom:1px solid #b8b8b8}.single-attachment:hover .attachment-settings .settings{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.single-attachment.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.single-attachment.deprecated,.single-attachment.deprecated .attachment-name a{color:#b8b8b8}.single-attachment.sortable-placeholder{background:#f5f5f5;height:40px}.single-attachment .attachment-name{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:1rem}.single-attachment .attachment-name .icon{margin-right:.5rem}.single-attachment .attachment-size{color:#b8b8b8;-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem}.single-attachment .attachment-comments,.single-attachment .editable-attachment-comment{-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-comments span,.single-attachment .editable-attachment-comment span{color:#555}.single-attachment .attachment-settings{-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings{color:#b8b8b8;display:block;position:absolute}.single-attachment .attachment-settings .editable-settings:hover,.single-attachment .attachment-settings .settings:hover{color:#72a114}.single-attachment .attachment-settings .settings{opacity:0;top:.5rem}.single-attachment .attachment-settings .editable-settings{opacity:1;top:1rem}.single-attachment .attachment-settings .icon-edit,.single-attachment .attachment-settings .icon-floppy{right:3.5rem}.single-attachment .attachment-settings .icon-delete{right:2rem}.single-attachment .attachment-settings .icon-delete:hover{color:red}.single-attachment .attachment-settings .icon-drag-v{cursor:move;right:0}.single-attachment .icon-delete{color:#b8b8b8}.single-attachment .icon-delete:hover{color:red}.single-attachment .editable-attachment-deprecated{padding-left:1rem}.single-attachment .editable-attachment-deprecated span{color:#b8b8b8}.single-attachment .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.single-attachment .editable-attachment-deprecated input:checked+span{color:#444}.single-attachment .percentage{background:rgba(114,161,20,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.more-attachments{display:block;padding:1rem 0 1rem 1rem}.more-attachments span{color:#b8b8b8}.more-attachments .more-attachments-num{color:#72a114;margin-left:.5rem}.more-attachments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.add-attach{cursor:pointer;overflow:hidden;position:relative}.add-attach input{display:none}.category-config .category-item,.category-config .resume{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.add-attach span{color:#b8b8b8}.attachment-preview img{max-height:95vh;max-width:95vw}.category-config:first-child{border-top:1px solid #b8b8b8}.category-config .resume{-webkit-box-align:space-between;-webkit-align-items:space-between;-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:flex;padding:1rem;position:relative}.category-config .resume-title{width:280px}.category-config .count{color:#b8b8b8;float:left;padding-right:5px}.category-config .summary-role{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#b8b8b8;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#72a114}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .icon{font-size:2rem;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-align:right}.category-config .category-items{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden;background-color:#f5f5f5;width:100%}.category-config .category-items.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.colors-table .row,.duty-custom-fields .custom-fields-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #f5f5f5}.colors-table .icon,.colors-table .icon-check-square{font-size:1.2rem}.colors-table .table-header:hover{background:0 0}.colors-table .table-header .row{padding-left:50px}.colors-table form:last-child .row{border:0}.colors-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.colors-table .row:last-child{border:0}.colors-table .row.edition .current-color{cursor:pointer}.colors-table .row.edition,.colors-table .row.new-value{padding-left:50px}.colors-table .row.hidden{display:none}.colors-table .row .color-column{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.colors-table .row .status-name{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px;position:relative}.colors-table .row .status-name span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.colors-table .row .status-slug{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:130px;text-align:center}.colors-table .row .status-wip-limit{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#b8b8b8;border-radius:2px;height:40px;width:40px}.activity-single .activity-user img,.duty-custom-fields form input{width:100%}.colors-table .icon{color:#b8b8b8;margin-right:1rem;opacity:0}.colors-table .icon.icon-check-square,.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.colors-table .icon:hover{color:#72a114;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.colors-table .icon-delete:hover{color:red}.colors-table .icon-check-square{color:#72a114}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom{font-size:1.2rem;cursor:pointer;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom.open{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-fields-body{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.duty-custom-fields .custom-fields-body.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.duty-custom-fields .custom-field-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-single .custom-field-options{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-custom-fields .custom-field-single .custom-field-options a{color:#b8b8b8}.duty-custom-fields .custom-field-single .custom-field-options a:hover{color:#72a114}.duty-custom-fields .custom-field-data{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{color:#888;display:block;line-height:.9rem}.duty-custom-fields .custom-field-options{margin:0}.duty-custom-fields .custom-field-value{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields form label{cursor:pointer}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#b8b8b8;margin-top:.5rem}.external-reference a{border-left:1px solid #b8b8b8;padding:0 .2rem;-webkit-transition:color .3s linear;transition:color .3s linear}.external-reference a:hover{color:#72a114}.external-reference a:first-child{border:0}.activity-single .comment-restore,.activity-single .date,.activity-single .deleted-comment,.activity-single.deleted-comment,.change-entry .activity-fromto,.more-activity,.more-comments,.show-more-comments{font-size:.9rem}.activity-single .deleted-comment .comment-body p,.activity-single.deleted-comment .comment-body p{font-size:1rem}.history-tabs{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.change-entry .activity-changed{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.history{margin-bottom:1rem}.changes-title{display:block;padding:.5rem}.changes-title:hover .icon{color:#72a114;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.changes-title .icon{color:#444;float:right;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:all .2s linear;transition:all .2s linear}.change-entry{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.change-entry:last-child{border-bottom:0}.change-entry .activity-changed,.change-entry .activity-fromto{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.history-tabs{border-bottom:3px solid #b8b8b8;margin-bottom:0;padding:.5rem 0}.history-tabs li{font-size:1.2rem;display:inline-block}.history-tabs li:first-child{border-right:1px solid #b8b8b8}.history-tabs a{color:#b8b8b8;padding:0 2rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs a.active{color:#444}.history-tabs a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs .icon{margin-right:.5rem}.add-comment:after{clear:both;content:'';display:table}.add-comment.active .button-green{display:block}.add-comment.active textarea{height:6rem;-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.add-comment.active .help-markdown{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.add-comment.active .preview-icon{opacity:1;position:absolute;right:1rem}.add-comment .help-markdown,.add-comment .preview-icon,.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave.ng-leave-active:last-child{opacity:0}.add-comment textarea{background:#fff;height:5rem;margin-bottom:.5rem;min-height:41px}.add-comment .save-comment{color:#fff;float:right}.add-comment .button-green{display:none}.more-comments,.show-more-comments{color:#b8b8b8;display:block;border-bottom:1px solid #b8b8b8}.add-comment .edit,.add-comment .preview-icon{position:absolute;right:1rem}.show-more-comments{border-top:1px solid #b8b8b8;padding:1rem 0 1rem 1rem}.show-more-comments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.more-comments{padding:1rem}.more-comments .prev-comments-num{color:#72a114;margin-left:.5rem}.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{-webkit-transition:all .3s ease-in;transition:all .3s ease-in}.comment-list.activeanimation .comment-single.ng-enter.ng-enter-active:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{opacity:1}.activity-single{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2rem 0;position:relative}.activity-single:hover .comment-delete,.activity-single:hover .comment-restore{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.activity-single:first-child{margin-top:0}.activity-single:last-child{border-bottom:0}.activity-single .deleted-comment,.activity-single.deleted-comment{color:#b8b8b8;padding:.5rem}.activity-single .deleted-comment a,.activity-single.deleted-comment a{color:#b8b8b8;margin-left:.3rem}.activity-single .deleted-comment a:hover,.activity-single.deleted-comment a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .deleted-comment img,.activity-single.deleted-comment img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:.5}.activity-single .deleted-comment .comment-body,.activity-single.deleted-comment .comment-body{display:none;margin:.2rem 0 .5rem}.activity-single .activity-username,.activity-single .username{margin-bottom:.5rem;color:#72a114}.activity-single .comment-restore{color:#b8b8b8;position:absolute;right:0;top:.4rem}.activity-single .comment-restore .icon{vertical-align:baseline}.activity-single .comment-restore:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .activity-user{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.activity-single .activity-content{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:calc(100% - 80px)}.activity-single .changes{background:#f5f5f5}.activity-single .changes .change-entry{display:none}.activity-single .changes .change-entry.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.activity-single .date{color:#b8b8b8;margin-left:1rem}.activity-single .wysiwyg{margin-bottom:0}.activity-single .comment-delete{color:red;opacity:0;position:absolute;right:0;top:2rem;-webkit-transition:all .2s linear;transition:all .2s linear}.activity-single .comment-delete:hover{color:#ff8282;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single.activity .change-entry{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.more-activity{border-bottom:1px solid #b8b8b8;color:#b8b8b8;display:block;padding:1rem}.more-activity .prev-activity-num{color:#72a114;margin-left:.5rem}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox-generic-form label{font-size:.75rem}.lightbox-add-member .help-text,.lightbox-delete-account .newsletter input+label,.lightbox-sprint-add-edit .delete-sprint,.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem}.lightbox-select-user .more-watchers{font-size:1rem}.lightbox-add-member .add-member-wrapper .icon-delete,.lightbox-add-member .icon,.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-size:1.2rem}.lightbox h2{font-size:1.6rem}.lightbox .close,.lightbox-add-member .icon-delete{font-size:2rem}.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress,.lightbox-select-user .more-watchers{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.lightbox h2,.lightbox-delete-account .newsletter input+label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.lightbox .close{color:#555;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.lightbox-add-member .add-member-wrapper fieldset,.lightbox-generic-form fieldset{position:relative}.lightbox .close:hover{color:#72a114}.open.lightbox{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.lightbox{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox-generic-loading .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.lightbox-generic-form form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form textarea{margin-bottom:1rem;max-height:9rem;min-height:7rem;resize:vertical}.lightbox-generic-form label{background:#f5f5f5;border:1px solid #b8b8b8;color:#444;cursor:pointer;display:block;padding:7px 30px;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form label:hover span{color:#fff}.lightbox-generic-form label span{color:#444;vertical-align:middle}.lightbox-generic-form .settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem}.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox-generic-form .settings fieldset:hover{color:#fff;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-add-member .button,.lightbox-add-member .extra-text{margin-top:1rem}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #72a114}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#72a114;border:1px solid #72a114;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-bulk form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-block textarea,.lightbox-create-issue textarea{min-height:8rem;max-height:12rem;margin-bottom:1rem}.lightbox-search form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-search fieldset{margin-bottom:1rem}.lightbox-add-member .add-member-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.lightbox-add-member .add-member-wrapper:last-child,.lightbox-add-member fieldset{margin-bottom:0}.lightbox-add-member .add-member-wrapper fieldset:first-child{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.lightbox-add-member .add-member-wrapper fieldset:last-child{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.lightbox-add-member select{width:80%}.lightbox-add-member .icon{margin-left:.5rem}.lightbox-add-member .icon-delete:hover{color:red}.lightbox-add-member .help-text{padding:.5rem 1rem}.lightbox-add-member .checksley-error-list{right:.5rem}.lightbox-add-member .checksley-error-list li{display:none}.lightbox-add-member .checksley-error-list li:first-child{display:block}.lightbox-sprint-add-edit form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint{color:#444;display:block;margin-top:1rem;text-align:right}.lightbox-sprint-add-edit .delete-sprint a{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-sprint-add-edit .delete-sprint a:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-generic-ask form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-account form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row,.related-tasks-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.lightbox-delete-project .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-webkit-flex-basis:500px;-ms-flex-preferred-size:500px;flex-basis:500px;-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;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{max-height:100%;max-width:100%;width:100%}.lightbox-generic-loading .progress-bar-wrapper{background:#e8e8e8;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;-webkit-transition:width .1s linear;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#e8e8e8;bottom:35px;color:#555;padding:.3rem;position:absolute;-webkit-transition:left .1s linear;transition:left .1s linear}.lightbox-create-issue form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:flex}.main-nav a,.main-nav span{display:block}.lightbox-create-issue .fieldset-row fieldset{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block .form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.lightbox-select-user .more-watchers{padding:.5rem;text-align:center}.lb-create-edit-userstory .ticket-role-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;max-width:calc(100% * (1/5) - .2rem)}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(5n+5){margin-right:0}.lb-create-edit-userstory .points-per-role{margin-bottom:1rem}.main-nav a:hover .helper{font-size:.9rem}.main-nav .item{font-size:1.2rem}tg-project-menu{background-position:0 -300px;min-height:calc(100vh - 40px);padding:1rem 0}.main-nav{list-style:none;padding:0;position:relative;text-align:center}.related-tasks-body .row,.related-tasks-body .status{text-align:left;position:relative}.main-nav a{color:#fff;padding:.75rem .8rem;position:relative}.main-nav a:hover{background:rgba(0,0,0,.2);color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.main-nav a:hover .helper{-webkit-animation:slideLeft .2s ease-in-out both;animation:slideLeft .2s ease-in-out both;background:-webkit-linear-gradient(left,#000 0,rgba(0,0,0,.8) 100%);background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;padding:.4rem 1rem;position:absolute;top:calc(50% - 1rem);-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;z-index:99}.main-nav a:hover .helper:after{background:#050505;content:'';height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:12px;z-index:98}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .active{background:rgba(0,0,0,.2);color:#9dce0a}.main-nav .active svg path{fill:#9dce0a;opacity:1}@-webkit-keyframes slideLeft{0%{opacity:0}100%{opacity:1}}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.related-tasks-body .pop-status,.related-tasks-body .pop-status a,.related-tasks-body .row{font-size:.9rem}.related-tasks-body .task-name input,.related-tasks-header .related-tasks-title{font-size:1rem}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine,.related-tasks-body .task-settings a,.related-tasks-header .icon{font-size:1.2rem}.related-tasks-body .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.related-tasks-header .related-tasks-title{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.related-tasks{margin-bottom:2rem;position:relative}.related-tasks-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.related-tasks-header .icon{color:#444;cursor:pointer}.related-tasks-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.related-tasks-body{width:100%}.related-tasks-body .row{-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;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.5rem 0 .5rem .5rem;width:100%}.related-tasks-body .row:hover{background:0 0}.related-tasks-body .row:hover .task-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .row:last-child{border:0}.related-tasks-body .row .tasks{overflow:hidden;width:100%}.related-tasks-body .row .status{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100px}.related-tasks-body .row .assigned-to{cursor:pointer;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .status:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover a{text-align:left;width:100%}.related-tasks-body .status .popover .point{text-align:center}.related-tasks-body .status .icon{color:#b8b8b8;margin-left:.2rem;opacity:0}.related-tasks-body .pop-status{background:#050505;color:#fff;display:none;left:40%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.related-tasks-body .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.related-tasks-body .blocked .icon,.related-tasks-body .blocked .icon:hover,.related-tasks-body .blocked a,.related-tasks-body .blocked a:hover,.related-tasks-body .blocked:hover .icon,.related-tasks-body .blocked:hover .icon:hover,.related-tasks-body .blocked:hover a,.related-tasks-body .blocked:hover a:hover,.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .task-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.related-tasks-body .task-name a{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-name input{margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .task-name.loading span{-webkit-animation:loading .5s linear,spin 1s linear infinite;animation:loading .5s linear,spin 1s linear infinite}.filters-inner .loading .loading-spinner,.ticket-detail-settings .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:#ff8282;color:#fff}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .iocaine,.related-tasks-body .iocaine:hover{background:rgba(157,206,10,.3)}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine{display:inline-block;margin-right:.5rem;vertical-align:top}.related-tasks-body .task-settings{margin:0 0 0 2rem;opacity:0;position:absolute;right:0;top:0;width:10%}.related-tasks-body .task-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .task-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .assigned-to{position:relative;text-align:left}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto.editable{cursor:pointer}.related-tasks-body .task-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{opacity:0;position:absolute;right:.5rem;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-data .ticket-data-container,.ticket-status .priority-data .pop-priority,.ticket-status .priority-data .pop-priority a,.ticket-status .severity-data .pop-severity,.ticket-status .severity-data .pop-severity a,.ticket-status .status-data .pop-status,.ticket-status .status-data .pop-status a,.ticket-status .type-data .pop-type,.ticket-status .type-data .pop-type a,.ticket-track-buttons .track-inner{font-size:.9rem}.ticket-data .ticket-title span:last-child,.ticket-track-buttons .track-button-counter{font-size:1.2rem}.ticket-data .ticket-title,.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .status-data .pop-status,.ticket-status .type-data .pop-type,.ticket-track-buttons .track-inner{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-detail-settings .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.ticket-data .ticket-title{font-size:1.6rem;margin:1.5rem 0 2rem}.ticket-data .ticket-title span{margin-right:.25rem}.ticket-data .ticket-data-container{margin-bottom:1rem}.ticket-data .ticket-data-container .icon{margin-left:.25rem}.ticket-data .level{display:inline-block;margin-right:.5rem;vertical-align:top}.filters h1,.filters h1 a{vertical-align:baseline}.ticket-data .level-name{color:#c2c2c2;float:right;text-transform:lowercase}.ticket-data .ticket-estimation .ticket-role-points{max-width:25%}.ticket-data .ticket-estimation .ticket-role-points:first-child{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.ticket-status{margin-bottom:.5rem}.ticket-status:last-child{margin:0}.ticket-status div{background:#e8e8e8;padding:.5rem 1rem .5rem .5rem;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .clickable:hover{background:#dcdcdc;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .type-data{position:relative}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .type-data .pop-type a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .severity-data{position:relative}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .severity-data .pop-severity a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .priority-data .pop-priority:after,.ticket-status .status-data .pop-status:after{background:#050505;height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);content:''}.ticket-status .priority-data{position:relative}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .priority-data .pop-priority a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{position:absolute;transform:rotate(45deg);width:0}.ticket-status .status-data{position:relative}.ticket-status .status-data .pop-status{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .status-data .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .status-data .pop-status a:last-child{border:0}.ticket-status .status-data .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .status-data .pop-status a:hover.point{color:#fff}.ticket-status .status-data .pop-status:after{position:absolute;transform:rotate(45deg);width:0}.ticket-track-buttons .track-inner{background:#e8e8e8;padding:.25rem;text-transform:uppercase;-webkit-transition:background .25s;transition:background .25s}.ticket-track-buttons .track-inner:hover{background:#dcdcdc}.ticket-track-buttons .track-button{width:100%}.ticket-track-buttons .active .track-button-counter{background:rgba(68,68,68,.5)}.ticket-track-buttons .active:hover .track-inner{background:rgba(157,206,10,.2)}.ticket-track-buttons .active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.ticket-track-buttons .active.is-hover path{fill:#ff8282}.single-project .track-container .icon path,.single-project .track-container .list-itemtype-track-likers.active path,.single-project .track-container .list-itemtype-track-watchers.active path{fill:currentcolor}.ticket-track-buttons .track-button-counter{background:rgba(68,68,68,.25);color:#f5f5f5;padding:0 .5rem}.ticket-track-buttons .vote-button{margin-bottom:.3rem}.ticket-track-buttons .watch-button{border-bottom:0}.ticket-track-buttons .ticket-watchers{margin:.5rem 0}.wizard-create-project .create-step1 fieldset:first-child,.wizard-create-project .wizard-action a:first-child{margin-right:.5rem}.ticket-track-buttons .add-watcher{display:block;margin:.5rem}.ticket-track-buttons .add-watcher .icon{background:rgba(68,68,68,.25);color:#f5f5f5;margin-right:.5rem;padding:.25rem}.ticket-track-buttons .add-watcher:hover .icon{background:#9dce0a;color:#f5f5f5;-webkit-transition:background .3s linear;transition:background .3s linear}.ticket-detail-settings{margin-top:2rem}.ticket-detail-settings .button,.ticket-detail-settings label{display:block;margin-bottom:.5rem;text-align:center}.ticket-detail-settings .button.editable,.ticket-detail-settings label.editable{cursor:pointer}.ticket-detail-settings .button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .button-gray,.ticket-detail-settings .button-gray:hover{background:#b8b8b8}.ticket-detail-settings .button-gray.editable:hover{background:#444;cursor:pointer}.ticket-detail-settings .button-gray.active{background:#72a114}.ticket-detail-settings .item-block.editable:hover{background:red;cursor:pointer}.ticket-detail-settings .button-red{display:block;margin-top:2rem}.wizard-create-project{background:url(/images/invitation_bg.jpg) center center no-repeat;bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910;background-size:cover;color:#fff;text-align:center}.wizard-create-project p{font-size:.9rem}.wizard-create-project .close{font-size:2rem;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.open.wizard-create-project{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.wizard-create-project{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.wizard-create-project fieldset{margin-bottom:1rem}.wizard-create-project .button-gray,.wizard-create-project .button-green{display:block;padding:12px;text-align:center}.wizard-create-project form{width:500px}.wizard-create-project .title{text-align:center;width:100%}.wizard-create-project h1,.wizard-create-project p{color:#fff}.wizard-create-project h1{line-height:1.5rem}.wizard-create-project p{opacity:.8}.wizard-create-project input,.wizard-create-project select,.wizard-create-project textarea{background:rgba(255,255,255,.7)}.wizard-create-project input::-webkit-input-placeholder,.wizard-create-project select::-webkit-input-placeholder,.wizard-create-project textarea::-webkit-input-placeholder{color:#444}.wizard-create-project input::-moz-placeholder,.wizard-create-project select::-moz-placeholder,.wizard-create-project textarea::-moz-placeholder{color:#444}.wizard-create-project input:-moz-placeholder,.wizard-create-project select:-moz-placeholder,.wizard-create-project textarea:-moz-placeholder{color:#444}.wizard-create-project input:-ms-input-placeholder,.wizard-create-project select:-ms-input-placeholder,.wizard-create-project textarea:-ms-input-placeholder{color:#444}.wizard-create-project .close{color:#fff}.wizard-create-project .close:hover{color:#ff8282}.wizard-create-project .wizard-step{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out;-webkit-animation-direction:alternate-reverse;animation-direction:alternate-reverse;display:none}.wizard-create-project .wizard-step.active{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out}.wizard-create-project .wizard-step.active.create-step1,.wizard-create-project .wizard-step.active.create-step2,.wizard-create-project .wizard-step.active.create-step3{display:block}.wizard-create-project .wizard-action div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .wizard-action a{color:#fff;display:inline-block;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 .template-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .create-step1 fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 input{display:none}.wizard-create-project .create-step1 input:checked+label{background:rgba(157,206,10,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label{background:rgba(245,245,245,.7);cursor:pointer;display:block;margin-bottom:1rem;padding:1rem;text-align:center;-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label:hover{background:rgba(114,161,20,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label .icon{font-size:3rem;color:#fff}.wizard-create-project .create-step1 h2{color:#fff;margin:.5rem 0 0;text-transform:uppercase}.wizard-create-project .create-step1 p{text-align:center}.wizard-create-project .progress-bar{bottom:0;height:.5rem;left:0;position:absolute;width:100%}.wizard-create-project .step1 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:25%}.wizard-create-project .step1 .progress-state span:nth-child(1){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .step2 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:75%}.wizard-create-project .step2 .progress-state span:nth-child(1),.wizard-create-project .step2 .progress-state span:nth-child(2){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .progress-state{position:absolute;width:100%}.wizard-create-project .progress-state span{color:rgba(255,255,255,.5);display:inline-block;margin-left:-100px;position:absolute;text-align:center;top:-2rem;-webkit-transition:all 1s ease-in;transition:all 1s ease-in;width:200px}.wizard-create-project .progress-state span:nth-child(1){left:25%}.wizard-create-project .progress-state span:nth-child(2){left:75%}.wizard-create-project .progress-bar-wrapper{background:rgba(255,255,255,.3);height:.5rem}.wizard-create-project .bar{background:rgba(157,206,10,.9);height:.5rem;left:0;position:absolute;top:0;width:0}.create-project{background:url(/images/bg.png) center center no-repeat;background-size:cover;-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;bottom:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.create-project .tagline{font-size:2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#fff;line-height:2rem;text-transform:uppercase}.introjs-tooltip p,.single-project .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project fieldset{margin-bottom:1rem}.create-project .create-project-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.create-project h1{color:#fff;text-align:center}.create-project .logo,.create-project .tagline{margin-bottom:1rem;text-align:center}.create-project form{margin-bottom:2rem}.create-project input{background:#fff}.create-project input::-webkit-input-placeholder{color:#b8b8b8}.create-project input::-moz-placeholder{color:#b8b8b8}.create-project input:-moz-placeholder{color:#b8b8b8}.create-project input:-ms-input-placeholder{color:#b8b8b8}.create-project .button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.create-project .button:hover{background:#9dce0a}.create-project a:hover{color:#fff}.filters h2 .icon-arrow-right{font-size:1rem}.filters-inner .loading .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-width:1rem}.filters h1 .icon{margin:0}.filters h2 .icon-arrow-right,.single-project h1{vertical-align:middle}.filters h2{font-size:1.2rem;margin-top:1rem}.filters input{background:#444;color:#fff}.filters input::-webkit-input-placeholder{color:#b8b8b8}.filters input::-moz-placeholder{color:#b8b8b8}.filters input:-moz-placeholder{color:#b8b8b8}.filters input:-ms-input-placeholder{color:#b8b8b8}.filters .icon-search{color:#b8b8b8;position:absolute;right:.7rem;top:.7rem}.filters-inner{opacity:0;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.filters-inner .loading{margin:0;padding:8px;text-align:center;width:100%}.filters-applied{margin-top:.5rem}.filters-step-cat .save-filters{color:#fff;display:block;text-align:center}.filters-step-cat .my-filter-name{background:#444;color:#f5f5f5;width:100%}.filters-step-cat .my-filter-name::-webkit-input-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name::-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-ms-input-placeholder{color:#b8b8b8}.filters-cats{margin-top:2rem}.filters-cats li{border-bottom:1px solid #b8b8b8;text-transform:uppercase}.filters-cats .custom-filters .title{color:#72a114}.filters-cats a{color:#444;display:block;padding:.5rem 0 .5rem .5rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.filters-cats .icon{color:#444;float:right;opacity:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-overlay{background:-webkit-radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background-color:#f5f5f5}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#72a114;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .track-container .list-itemtype-track{font-size:.9rem}.single-project .description,.single-project .title{font-size:1rem}.single-project .single-project-intro{margin-bottom:2rem}.single-project .intro-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.single-project h1{color:#72a114;display:inline-block;line-height:1.2;margin-bottom:0;margin-right:3rem}.single-project .private{font-size:1rem;vertical-align:super}.single-project .like-watch-container{margin-left:auto}.single-project .track-buttons-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.single-project .project-data,.single-project .title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#72a114}.single-project .track-container .icon svg{max-height:1rem;max-width:1rem}.single-project .project-data{display:flex}.single-project .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-shrink:3;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .involved-data{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-organization,.single-project .involved-team{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-organization li,.single-project .involved-team li{margin-right:.14rem;width:24%}.single-project .involved-organization li:nth-child(4n),.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-organization a,.single-project .involved-team a{display:block}.single-project .involved-organization img,.single-project .involved-team img{border-radius:.2rem;width:100%}.issues-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table .pop-status,.issues-table .pop-status a,.issues-table .table-main{font-size:.9rem}.issues-table .title{font-size:1rem}.empty-issues .title{font-size:1.2rem;text-transform:uppercase}.empty-issues p,.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.issues-table .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8}.issues-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .avatar,.kanban-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .title:hover{background:0 0}.issues-table .title div{cursor:pointer}.issues-table .title .votes{color:#555}.issues-table .table-main{border-bottom:1px solid #ebebeb}.issues-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-webkit-flex-basis:60%;-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-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-align:center;width:75px}.issues-table .votes{color:#555;-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes.inactive{color:#b8b8b8}.issues-table .votes.is-voted{color:#9dce0a}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .created-field,.issues-table .issue-field{-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{opacity:0;position:absolute;right:0;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .pop-status{background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99}.issues-table .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1200px){.issues-table .created-field,.issues-table .level-field{display:none}}@media (max-width:767px){.issues-table .assigned-field,.issues-table .created-field,.issues-table .level-field{display:none}}.empty-issues{margin-top:4rem;text-align:center}.empty-issues img{margin-bottom:1rem}.empty-issues p,.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table-body .task-column .kanban-column-intro{font-size:.9rem}.kanban-table-body,.kanban-table-header .task-colum-name .icon{font-size:1rem}.kanban-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table .vfold.task-colum-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold .kanban-task,.kanban-table .vfold.task-colum-name .icon-bulk,.kanban-table .vfold.task-colum-name .icon-closed-eye,.kanban-table .vfold.task-colum-name .icon-open-eye,.kanban-table .vfold.task-colum-name .icon-plus,.kanban-table .vfold.task-colum-name .icon-vfold,.kanban-table .vfold.task-colum-name .icon-vunfold,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.task-column{-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.kanban-table-header .kanban-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.kanban-table-body,.kanban-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-header .task-colum-name{font-size:1.2rem;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem .5rem .5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.kanban-table-header .task-colum-name .icon.hfold,.kanban-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-table-header .icon-closed-eye,.kanban-table-header .icon-open-eye{display:inline-block}.kanban-table-header .icon-closed-eye svg,.kanban-table-header .icon-open-eye svg{fill:#b8b8b8;height:1.1rem;margin-top:.25rem;width:1.1rem}.kanban-table-header .icon-closed-eye:hover svg,.kanban-table-header .icon-open-eye:hover svg{fill:#72a114}.kanban-table-header .icon-open-eye .svg-eye-closed{display:none}.kanban-table-header .icon-closed-eye .svg-eye-closed,.kanban-table-header .icon-open-eye .svg-eye-open{display:block}.kanban-table-header .icon-closed-eye .svg-eye-open{display:none}.kanban-table-body{display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-inner,.search-filter ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;margin:0 10px 0 0;max-width:300px;overflow-y:auto;widows:300px}.kanban-table-body .task-column:last-child{margin-right:0}.kanban-table-body .task-column .kanban-column-intro{font-family:opensans-semibold,Arial,Helvetica,sans-serif;color:#b8b8b8;margin:1rem 2rem}.kanban-table-body .task-column .kanban-column-intro.active{color:#050505}.kanban-table-body .task-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-inner{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.search-filter a{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;opacity:.2}.search-filter ul{border-bottom:3px solid #b8b8b8;display:flex;padding-bottom:.5rem}.search-filter li{margin-right:1rem}.search-filter .active,.search-filter a:hover{color:#555;opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.search-filter .icon{margin-right:.4rem}.search-filter .name{padding-left:5px}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#b8b8b8}.search-in input::-moz-placeholder{color:#b8b8b8}.search-in input:-moz-placeholder{color:#b8b8b8}.search-in input:-ms-input-placeholder{color:#b8b8b8}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{color:#b8b8b8}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #f5f5f5}.search-result-table .user-story-name .icon{font-size:1rem;color:#b8b8b8}.empty-search-results .title{font-size:1.2rem;text-transform:uppercase}.search-result-table .row{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .row .ref{-webkit-flex-basis:30px;-ms-flex-preferred-size:30px;flex-basis:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 1rem}.search-result-table .row .user-stories{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.search-result-table .row .points,.search-result-table .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem}.search-result-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.search-result-table .points,.search-result-table .status{position:relative}.search-result-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.empty-search-results{margin-top:4rem;text-align:center}.empty-search-results img{margin-bottom:1rem}.empty-search-results p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.team-filters nav li{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.table-team .team-header,.team-filters nav li:last-child{border-bottom:0}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters nav a{display:block;padding:1rem 0 1rem 1rem}.team-filters nav a.active,.team-filters nav a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.team-filters nav .active,.team-filters nav a.active.icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.team-filters nav .icon{color:#050505;float:right;opacity:0}.table-team .leave-project,.table-team .popover,.table-team .popover a{font-size:.9rem}.table-team .attribute .points{font-size:1.6rem}.table-team .attribute,.table-team .attribute .points,.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.policy-table .policy-table-header,.table-team .avatar .name,.table-team .team-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.table-team .row{padding:.5rem}.table-team .username{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:6;-webkit-flex:6;-ms-flex:6;flex:6;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{color:#050505;font-size:1.8rem}.table-team .attribute .points{color:#444}.table-team .attribute .top{color:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{color:#b8b8b8;display:block}.table-team .leave-project .icon{margin-right:.2rem}.table-team .leave-project:hover .icon{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .hero{width:100%}.table-team .hero .row{background:#f5f5f5;border-bottom:0;margin:1rem 0}.table-team .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.table-team .avatar img{-webkit-flex-basis:66px;-ms-flex-preferred-size:66px;flex-basis:66px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:66px}.table-team .avatar figcaption{margin-left:1rem;width:65%}.table-team .avatar figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .position{color:#b8b8b8}.table-team .popover{background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99}.table-team .popover a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.policy-table .policy-table-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{border-bottom:2px solid #b8b8b8}.user-change-password label,.user-profile label{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#72a114;-webkit-transition:background .3s linear;transition:background .3s linear}.policy-table label{background:#b8b8b8;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile form .avatar-container p{font-size:.75rem}.user-profile .delete-account,.user-profile form .avatar-container .use-gravatar{font-size:.9rem}.user-profile form .avatar-container span{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.user-profile form .avatar-container .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem}.user-profile form{max-width:700px;width:100%}.user-profile form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.user-profile form .avatar-container{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:1rem}.user-profile form .avatar-container .image-container{position:relative}.user-profile form .avatar-container .avatar{border-radius:8%;width:100%}.user-profile form .avatar-container .overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile form .avatar-container .loading-spinner{border:0;min-height:3rem;min-width:3rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.user-profile form .avatar-container p{line-height:.8rem;margin-bottom:.3rem;text-align:center}.user-profile form .avatar-container .use-gravatar{cursor:pointer;display:inline-block;text-align:center;width:100%}.user-profile form .data{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.user-profile fieldset{margin-bottom:1rem}.user-profile .submit{margin-top:2rem}.user-profile label{display:block;margin-bottom:.5rem}.user-profile textarea{min-height:7rem}.user-profile .button-green{color:#fff;cursor:pointer;display:block;padding:12px;text-align:center}.user-profile .delete-account{display:block;margin-top:1rem}.wiki-nav li input{font-size:1rem}.wiki-nav li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.wiki-nav li:hover .icon{opacity:1;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li a{display:block;padding:1rem 0 1rem 1rem}.wiki-nav li a span{cursor:pointer}.wiki-nav li .icon{color:#050505;float:right;opacity:0;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background:#444;color:#f5f5f5}.wiki-nav li input::-webkit-input-placeholder{color:#b8b8b8}.wiki-nav li input::-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-ms-input-placeholder{color:#b8b8b8}.wiki-nav li .loading{margin:0;padding:8px;text-align:center;width:100%}.wiki-nav .add-button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.wiki-summary .wiki-user-modification,.wiki-summary div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.wiki-summary .username{font-size:1.2rem;color:#9dce0a;white-space:nowrap}.wiki-summary{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary div{display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:1rem}.wiki-summary .number{line-height:2rem;top:0}.wiki-summary .wiki-user-modification{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary figure{margin-right:.3rem;width:32px}.external-app-wrapper .app-card a,.external-app-wrapper .app-card p,.external-app-wrapper .user-card a{font-size:.75rem}.external-app-wrapper .cancel{font-size:.9rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:6rem;margin:0 auto;width:6rem}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.external-app-wrapper .app-card a,.external-app-wrapper .button-green,.external-app-wrapper .user-card a{display:block}.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card .app-image{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .cancel{display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #f5f5f5;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;-webkit-transition-delay:.2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single.blocked,.working-on .duty-single.blocked{background:rgba(255,130,130,.2);color:red}.watching .duty-single>a,.working-on .duty-single>a{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:0;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}.empty-ticket .data,.home-project-list li a{-webkit-box-orient:vertical;-webkit-box-direction:normal}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper,.home-wrapper .title-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-wrapper{display:flex}.home-wrapper .duty-summary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .project-list{width:250px}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;margin:0 0 .5rem;padding:.9rem 1rem}.empty-ticket,.home-project-list li a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-project-list p{font-size:.75rem}.projects-empty p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.home-project-list h2,.home-project-list p{font-family:opensans-regular,Arial,Helvetica,sans-serif}.home-project-list li{border:1px solid #dedede;border-radius:3px;cursor:pointer;margin-bottom:.75rem;padding:1rem;text-overflow:ellipsis}.home-project-list li:hover{border-color:#9dce0a;-webkit-transition:all .3s linear;transition:all .3s linear}.home-project-list li:hover p{color:#555;-webkit-transition:color .3s linear;transition:color .3s linear}.home-project-list li:hover .private path{fill:#555;-webkit-transition:fill .3s linear;transition:fill .3s linear}.home-project-list li a{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:5rem}.home-project-list h2{color:#555;font-size:1.5rem;line-height:1.3;margin-bottom:.5rem;text-transform:none}.home-project-list h2 .project-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.home-project-list p{color:#b8b8b8;line-height:125%;margin:0}.projects-empty{text-align:center}.projects-empty svg{height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty svg path{fill:#f5f5f5}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:2rem 9rem 1rem;text-align:center}.empty-ticket{display:flex}.empty-ticket .data,.navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.empty-ticket:not(:last-child){border-bottom:1px solid #f5f5f5;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e8e8e8;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:40vw}.empty-ticket .line:last-child{margin:0;width:20vw}.navbar{display:flex;height:40px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar:after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar .nav-left>a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left>a.logo{background:rgba(0,0,0,.2);padding:.4rem .75rem}.navbar .nav-left>a svg{height:1.6rem;max-width:2rem}.navbar .nav-left>a path{fill:#fff}.navbar .nav-right{margin-left:auto}.navbar .nav-right a{color:#fff;padding:.5rem 2rem}.navbar a{color:#fff;display:inline-block;-webkit-transition:all .2s linear;transition:all .2s linear}.navbar a svg path{fill:#718874}.navbar a:hover{background:rgba(0,0,0,.2);color:#9dce0a}.navbar a:hover svg path{fill:#fff}.navbar a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar a.user-avatar span{padding-right:1rem}.navbar img{height:2.5rem;padding-left:.5rem;vertical-align:middle}.navbar svg{height:1.2rem;max-width:1.2rem}.navbar svg path{fill:#11241f;-webkit-transition:all .2s;transition:all .2s}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#050505;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(5,5,5,0);border-bottom-color:#050505}.navbar-dropdown ul:after{border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown a{color:#b8b8b8;display:block;padding:.8rem .5rem}.navbar-dropdown .create-options,.profile-filter{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#9dce0a}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.navbar-dropdown a.import-project-button{padding-left:.75rem;padding-right:.75rem}.navbar-dropdown .create-options{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.profile-favs{border-top:1px solid #f5f5f5}.profile-filter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile,.profile-filter .searchbox{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.profile-filter .searchbox{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{color:grayer;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs,.profile-projects,.profile-timeline{border-top:1px solid #f5f5f5}.profile-filter .searchbox input:focus{border-bottom:1px solid #b8b8b8;outline:0;-webkit-transition:border-bottom .3s ease-in;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#b8b8b8;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile .timeline-wrapper .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-height:3rem;max-width:3rem}.profile{display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{background:#fff;margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;-webkit-transition:all .3s cubic-bezier(.09,.43,.35,.95);transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .profile-sidebar{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{margin:2rem auto;max-width:160px;text-align:center}.profile .empty-tab p{font-size:.9rem}.profile-bar .profile-stats .stat-name{font-size:.9rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username{font-size:1.2rem}.profile-bar h2{font-size:1.6rem}.profile-bar .profile-stats .stat-number,.profile-bar h1{font-size:2rem}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .profile-organizations h3,.profile-bar .profile-stats .stat-number,.profile-bar h1{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{-webkit-filter:brightness(40%) saturate(150%) hue-rotate(60deg);filter:brightness(40%) saturate(150%) hue-rotate(60deg);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1);-webkit-transition-delay:.3s;transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.01,.7,1,1);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#b8b8b8;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar h1{line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar h2{color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#b8b8b8;margin-bottom:1rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#b8b8b8}.profile-bar .profile-stats{border-bottom:1px solid #f5f5f5;color:#555;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{display:block;line-height:1}.profile-bar .profile-stats .stat-name{display:block}.profile-bar .profile-organizations{border-bottom:1px solid #f5f5f5;border-top:1px solid #f5f5f5;margin-bottom:1rem;padding:1rem 0}.profile-bar .profile-organizations h3{margin-bottom:.5rem}.profile-bar .profile-organizations .profile-organizations-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.profile-bar .profile-organizations .organization{background:#b8b8b8;border-radius:5px;height:45px;margin-right:.2rem;width:45px}.profile-bar .profile-quote{background:url(/images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contact-single .profile-contact-data h1 span{font-size:.9rem}.profile-contact-single .profile-contact-data .extra-info{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-contact-single .profile-contact-data h1,.profile-contact-single .profile-contact-data h1 span{font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-contacts{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}.profile-contact-filters{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.profile-contact-filters a{border-bottom:2px solid #fff;color:#b8b8b8;display:inline-block;padding:1rem 1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-contact-filters a.active,.profile-contact-filters a:hover{border-bottom:2px solid #b8b8b8;color:#72a114}.profile-contact-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.8rem 1rem}.profile-contact-single .profile-contact-picture{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:1rem;max-width:54px}.profile-contact-single .profile-contact-picture img{border-radius:.2rem;width:100%}.profile-contact-single .profile-contact-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-contact-single .profile-contact-data h1{font-size:1.2rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:1.6;margin-bottom:0;text-transform:none}.profile-contact-single .profile-contact-data h1 span{background:#f5f5f5;color:#555;margin-left:1rem;padding:.1rem .3rem}.profile-contact-single .profile-contact-data p{color:#555;margin-bottom:0}.profile-contact-single .profile-contact-data .extra-info{color:#555}.profile-contact-single .profile-contact-data .position{margin-right:.3rem}.profile-contact-single .profile-project-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-left:auto;width:100px}.profile-contact-single .profile-project-stats div{color:#b8b8b8;margin-right:.5rem}.profile-contact-single .profile-project-stats div .icon{margin-right:.2rem;vertical-align:center}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#b8b8b8;display:inline-block;padding:1rem 1.25rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #f5f5f5;border-right:1px solid #f5f5f5;position:relative;top:1px;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .icon{margin-right:.4rem}.profile-sidebar h4{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.profile-sidebar h4 .icon{color:#b8b8b8;margin-right:.3rem;vertical-align:text-bottom}.profile-sidebar p{font-size:.9rem;color:#b8b8b8}.profile-sidebar a{color:#72a114}.profile-sidebar .trans-button{margin-bottom:1rem}.profile-projects .list-itemtype-project{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:10rem}.profile-projects .list-itemtype-project .list-itemtype-project-right{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-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:200px}.project-list-wrapper .help-area{font-size:.9rem;color:#b8b8b8;width:200px}.project-list-wrapper .drag{font-size:1.2rem}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.project-list-wrapper .create-options a.create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .create-options a.import-project-button{padding:.53rem .8rem}.project-list-wrapper .create-options a.import-project-button:hover{background:#444}.project-list-wrapper .create-options a.import-project-button .icon-upload{margin:0}.project-list-wrapper .project-list-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .placeholder{background-color:#fdfdfd;height:5rem}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:#fcfef8;cursor:move;-webkit-transition:background .3s;transition:background .3s}.master,body{background:#fff}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .drag{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:#b8b8b8;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.profile-timeline .single-attachment span{font-size:1rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child,.profile-timeline .activity-member-view a{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-timeline .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.profile-timeline .activity-item{border-bottom:1px solid #f5f5f5;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#72a114}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#b8b8b8;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-webkit-flex-basis:2rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-member-view{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-timeline .activity-member-view p{color:#b8b8b8}a,body{color:#444}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.profile-timeline .single-attachment .icon{margin-right:.3rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{max-height:3rem;max-width:3rem}:root .taskboard-table-body .task-row,_:-ms-fullscreen .task-row{min-height:auto}.menu-secondary{background:#f5f5f5}.menu-tertiary{background-color:#879b89}.extrabar{background:#f5f5f5}h1,h2,h3,h4,h5,h6{color:#050505}a:hover{color:#72a114}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#b8b8b8;color:#444}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#9f9f9f}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#9f9f9f}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#9f9f9f}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9f9f9f}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid red}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);color:#fff}blockquote{border-left:5px solid #f5f5f5}blockquote,blockquote p,cite{color:#555}.summary{background:#444;color:#fff}.kanban-table-header .task-colum-name .icon,.taskboard-table-header .task-colum-name .icon{color:#b8b8b8}.navbar{background:rgba(0,0,0,.5)}.navbar:after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#879b89;background-image:url(../images/menu.png)}.kanban-table-body .kanban-uses-box,.kanban-table-header .task-colum-name,.taskboard-table-body .taskboard-tasks-box{background:#f5f5f5}.main-nav svg path{fill:#fff}.taskboard-table-header .task-colum-name{background:#f5f5f5;border-top:3px solid #b8b8b8}.kanban-table-header .task-colum-name{border-top:3px solid #b8b8b8} \ No newline at end of file + */.pika-single{display:block;position:relative;width:240px;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.introjs-bullets ul,.introjs-button,.pika-select{display:inline-block}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;position:absolute!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:10000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);filter:progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000);box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow{border:5px solid #fff;position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-color:transparent transparent #fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow.left,.introjs-arrow.right{top:10px}.introjs-arrow.right,.introjs-arrow.right-bottom{right:-10px;border-color:transparent transparent transparent #fff}.introjs-arrow.right-bottom{bottom:10px}.introjs-arrow.bottom{bottom:-10px;border-color:#fff transparent transparent}.introjs-arrow.left,.introjs-arrow.left-bottom{left:-10px;border-color:transparent #fff transparent transparent}.introjs-arrow.left-bottom{bottom:10px}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-button{position:relative;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-progress,.loader-active,.taskboard,.taskboard-inner,body.loading-project,h1 .date,h1 span{overflow:hidden}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-bullets{text-align:center}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.admin-membership header a,.header-with-actions .button,.kanban .kanban-settings,.save-wiki{float:right}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.master,fieldset{position:relative}body,html{width:100%;min-height:100%}*{box-sizing:border-box}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font:inherit;font-size:100%;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}body{font-family:opensans-regular,Arial,Helvetica,sans-serif;line-height:1.3}.icon{font-family:taiga}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body .master.ng-animate{-webkit-transition:0;transition:0}.drag-active{overflow-x:hidden}.master{height:100%;min-height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu-secondary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary.filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;-webkit-transition:all .2s linear;transition:all .2s linear;width:0}.menu-secondary.filters-bar.active{padding:2em 1em;-webkit-transition:all .2s linear;transition:all .2s linear;width:260px}.menu-secondary.filters-bar.active .filters-inner{opacity:1;-webkit-transition:all .4s ease-in;transition:all .4s ease-in}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions .action-buttons{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;margin-left:10px}fieldset,p img{margin:0}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}h2{font-size:2rem}h1,h1 span{font-size:3rem}h1,h2{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}.wysiwyg dl dt,strong{font-weight:700}h1{margin-bottom:1rem;text-transform:uppercase}h1 span{margin-right:.5rem;vertical-align:bottom}h1 span.green,h1 span:last-child{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#72a114}h1 .date{max-width:500px;color:#b8b8b8}h2{line-height:1.2;margin-bottom:1rem}p{line-height:1.5}em{font-style:italic}[class*=' icon-']:before,[class^=icon-]:before,[data-icon]:before{font-family:taiga!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;speak:none;text-transform:none!important}hr{border:solid #050505;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{-webkit-transition:color .3s linear;transition:color .3s linear}[data-icon]:before{content:attr(data-icon)}.admin-contrib .help .alt-image,.admin-third-parties .help .alt-image,.wysiwyg dl dt{font-style:italic}.icon-bug:before{content:'a'}.icon-copy:before{content:'b'}.icon-minimize:before{content:'c'}.icon-maximize:before{content:'d'}.icon-comment:before{content:'e'}.icon-plus:before{content:'f'}.icon-attachments:before{content:'g'}.icon-edit:before{content:'h'}.icon-documents:before{content:'i'}.icon-delete:before{content:'j'}.icon-arrow-bottom:before{content:'k'}.icon-arrow-left:before{content:'l'}.icon-arrow-right:before{content:'m'}.icon-arrow-up:before{content:'n'}.icon-briefcase:before{content:'o'}.icon-caret-down:before{content:'p'}.icon-caret-up:before{content:'q'}.icon-check-square:before{content:'r'}.icon-notification-error:before{content:'s'}.icon-settings:before{content:'t'}.icon-document:before{content:'u'}.icon-warning:before{content:'v'}.icon-move:before{content:'w'}.icon-drag-v:before{content:'x'}.icon-filter:before{content:'y'}.icon-help:before{content:'z'}.icon-reload:before{content:'A'}.icon-writer:before{content:'B'}.icon-stats:before{content:'C'}.icon-floppy:before{content:'D'}.icon-warning-alt:before{content:'E'}.icon-video:before{content:'F'}.icon-bulk:before{content:'G'}.icon-vunfold:before{content:'H'}.icon-tasks:before{content:'I'}.icon-kanban:before{content:'J'}.icon-search:before{content:'K'}.icon-wiki:before{content:'L'}.icon-team:before{content:'M'}.icon-vfold:before{content:'N'}.icon-issues:before{content:'O'}.icon-iocaine:before{content:'P'}.icon-archive:before{content:'Q'}.icon-capslock:before{content:'R'}.icon-upload:before{content:'S'}.icon-github:before{content:'T'}.icon-timeline:before{content:'U'}.icon-scrum:before{content:'V'}.icon-project:before{content:'W'}.icon-heart:before{content:'X'}.icon-eye:before{content:'Y'}@-webkit-keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@keyframes loading{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0}100%{-webkit-filter:blur(0);filter:blur(0);opacity:1}}@-webkit-keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{50%{-webkit-filter:invert(1);filter:invert(1);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes formSlide{0%{-webkit-filter:blur(5px);filter:blur(5px);opacity:0;-webkit-transform:translateY(10rem);transform:translateY(10rem)}50%{-webkit-filter:blur(0);filter:blur(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;flex:10}}@keyframes loadBar{0%,20%{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}10%{-webkit-box-flex:10;-webkit-flex:10;-ms-flex:10;flex:10}}@-webkit-keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;-webkit-transform:translateY(-.25rem);transform:translateY(-.25rem)}60%{opacity:1}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes blink{85%{opacity:1}100%{opacity:.6}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote cite,sup{font-size:.9rem}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{display:block}blockquote cite:before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}sup{vertical-align:super}.blocked-warning .icon,.icon,.us-story-main-data .us-title.blocked{vertical-align:middle}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}.pika-single{z-index:999999}.pika-single .pika-title{color:#444}.pika-single .is-selected .pika-button{background:#72a114;border-radius:0!important;box-shadow:inset 0 1px 3px #72a114}.pika-single .is-today .pika-button{color:#72a114}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#9dce0a!important;border-radius:0!important;box-shadow:inset 0 1px 3px #9dce0a!important}fieldset{border:0;padding:0;width:100%}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{-webkit-transition:border .3s linear;transition:border .3s linear}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.icon-capslock{bottom:.6rem;color:#555;display:none;position:absolute;right:1rem}.auth,.error-main{bottom:0;z-index:999;left:0}.admin-membership header:after{clear:both;content:'';display:table}.admin-membership .check input{height:40px;width:85px}.admin-roles p{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#b8b8b8}.auth .logo,.auth .tagline{color:#fff;text-align:center}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.kanban,.taskboard{height:calc(100vh - 40px)}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);position:absolute;width:100%}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.project-values-title{-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;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem;text-transform:uppercase}.project-values-title h2{margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(/images/bg.png) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.invitation-main .avatar,.invitation-main .invitation-container,.kanban{-webkit-box-orient:vertical;-webkit-box-direction:normal}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth .logo{font-size:3rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.auth .auth-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{padding:0 33%;text-align:center;width:100%}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{text-align:center}.auth .login-text a:hover,.auth .register-text a:hover{color:#9dce0a}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moustache;animation-name:moustache;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;fill:rgba(114,161,20,.9);stroke:#9dce0a;stroke-width:1px;-webkit-transform-origin:50% 20%;-ms-transform-origin:50% 20%;transform-origin:50% 20%;-webkit-transition:.3s;transition:.3s}.moustache:hover{fill:rgba(157,206,10,.9);-webkit-transition:.3s;transition:.3s}.list-itemtype-project .icon path,.list-itemtype-project .list-itemtype-track-likers.active path,.list-itemtype-project .list-itemtype-track-watchers.active path,.list-itemtype-ticket .icon path,.list-itemtype-ticket .list-itemtype-track-likers.active path,.list-itemtype-ticket .list-itemtype-track-watchers.active path,.list-itemtype-timeline .icon path,.list-itemtype-timeline .list-itemtype-track-likers.active path,.list-itemtype-timeline .list-itemtype-track-watchers.active path,.list-itemtype-user .icon path,.list-itemtype-user .list-itemtype-track-likers.active path,.list-itemtype-user .list-itemtype-track-watchers.active path{fill:currentcolor}@-webkit-keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes moustache{0%,30%,70%,90%{-webkit-transform:rotate(0);transform:rotate(0)}10%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}.backlog-menu{background:#f5f5f5;color:#050505;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .trans-button{color:#050505;display:inline-block;padding:.4rem 1.5rem}.backlog-menu .trans-button.active,.backlog-menu .trans-button:hover{background:#555;color:#f5f5f5}.backlog-menu .trans-button.active:hover{background:#a2a2a2}.backlog-menu .trans-button.move-to-current-sprint{display:none}.invitation-main,.invitation-main .invitation-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-menu .button-bulk{margin-left:.2rem}.invitation-main{background:url(/images/invitation_bg.jpg) center center no-repeat;-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;background-size:cover;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;z-index:999}.invitation-main .invitation-form .forgot-pass{font-size:.9rem}.invitation-main .avatar .person-name,.invitation-main .invitation-text,.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.invitation-main .invitation-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar .person-name{color:#fff}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{color:#fff;text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header,.invitation-main .register-text{color:#fff}.invitation-main .login-form,.invitation-main .register-form{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .register-text a{color:#72a114}.invitation-main .button-auth{display:block}.error-main,.kanban{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.invitation-main .button-blackish:hover{background:#72a114}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.issues .filters-bar{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:260px}.issues .filters-inner{opacity:1;padding:1rem}.kanban{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px)}.kanban header{min-height:70px}.kanban .burndown-container{display:none}.error-main{background:url(/images/invitation_bg.jpg) center center no-repeat;background-size:cover;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;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;position:fixed;right:0;top:0}.taskboard-inner,.us-story-main-data header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table,.taskboard-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal}.error-main .error-container{color:#fff;-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff;margin-bottom:3rem}.error-main a{color:#72a114}.error-main a:hover{color:#9dce0a}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.taskboard-inner{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.team h2{margin:1rem 0}.team h2 span:last-child{color:#72a114}.us-story-main-data .us-title .block-desc-container,.us-story-main-data .us-title .us-related-task{font-size:.9rem}.us-story-main-data .us-title,.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{font-size:1.2rem}.blocked-warning .blocked,.blocked-warning .icon,.issue-nav a,.us-story-main-data .us-title .us-name,.us-story-main-data .us-title .us-number{font-size:2rem}.blocked-warning .blocked,.us-story-main-data .us-title .us-number{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.us-story-main-data .us-title{font-family:opensans-regular,Arial,Helvetica,sans-serif}.us-story-main-data .us-title .block-description-title,.us-story-main-data .us-title.blocked .unblock{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.us-story-main-data{margin-bottom:2rem}.us-story-main-data header{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.us-story-main-data .us-title{background:#f5f5f5;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked{background:red;-webkit-transition:all .2s linear;transition:all .2s linear}.us-story-main-data .us-title.blocked .us-title-text,.us-story-main-data .us-title.blocked input{margin-bottom:.5rem}.us-story-main-data .us-title.blocked .us-name,.us-story-main-data .us-title.blocked .us-number,.us-story-main-data .us-title.blocked .us-related-task{color:#fff}.us-story-main-data .us-title.blocked a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title.blocked a:hover{color:#ff8282}.us-story-main-data .us-title.blocked .unblock{color:#fff;float:right}.us-story-main-data .us-title.blocked .unblock:hover{color:#ff8282;-webkit-transition:color .3s linear;transition:color .3s linear}.us-story-main-data .us-title p{margin-bottom:0}.us-story-main-data .us-title .us-edit-name-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.us-story-main-data .us-title .edit-subject{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.basic-table,.us-story-main-data .us-title .us-title-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.us-story-main-data .us-title input{background:#fff;-webkit-box-flex:9;-webkit-flex-grow:9;-ms-flex-positive:9;flex-grow:9}.us-story-main-data .us-title .save-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.us-story-main-data .us-title .us-title-text{-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;display:flex;margin-bottom:0;max-width:94%}.duty-content .save-container .loading-spinner,.us-story-main-data .loading-spinner{max-height:1.5rem;max-width:1.5rem}.us-story-main-data .us-title .us-title-text:hover .icon-edit{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.us-story-main-data .us-title .us-number{color:#b8b8b8;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;line-height:2.2rem;margin-right:.5rem}.us-story-main-data .us-title .us-name{color:#444;display:inline-block;line-height:2.2rem;padding-right:1rem;width:100%}.us-story-main-data .us-title .icon-edit,.us-story-main-data .us-title .icon-floppy{color:#b8b8b8;margin-left:.5rem}.us-story-main-data .us-title .icon-edit{opacity:0}.us-story-main-data .us-title .us-related-task{color:#b8b8b8;margin-top:.5rem}.us-story-main-data .us-title .us-related-task a{border-left:1px solid #b8b8b8;padding:0 .2rem}.us-story-main-data .us-title .us-related-task a:hover{color:#72a114}.us-story-main-data .us-title .us-related-task a:first-child{border:0}.us-story-main-data .us-title .block-description-title{color:#fff;margin-right:.5rem}.us-story-main-data .us-title .block-description{color:#fff;display:inline-block;margin-right:5rem}.blocked-warning{margin-bottom:1rem}.blocked-warning .blocked{color:red;line-height:2.5rem;margin-bottom:.5rem}.blocked-warning .block-description{color:#444;margin:0}.duty-content .edit-description,.wiki-content,.wysiwyg{margin-bottom:2rem}.issue-nav{position:absolute;right:1rem;top:1rem}.duty-content{position:relative}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#444}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#b8b8b8}.duty-content textarea{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-content .edit{color:#444}.duty-content .view-description .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .save{top:.4rem}.duty-content .edit-description .edit{position:absolute;right:2.5rem;top:.4rem;-webkit-transition:all .2s linear;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.wysiwyg textarea{background:#fff;max-height:none}.wiki .remove{font-size:.9rem;color:#b8b8b8}.wiki .remove:hover span{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove:hover .icon{color:red;-webkit-transition:color .2s linear;transition:color .2s linear}.wiki .remove .icon{color:#b8b8b8;margin-right:.2rem}.wiki-content{position:relative}.wiki-content.editable:hover .wysiwyg{background:#f5f5f5;cursor:pointer}.wiki-content .view-wiki-content:hover .edit{opacity:1;top:-1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .view-wiki-content .edit{background:#f5f5f5;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .icon:hover{color:#444;opacity:.3;-webkit-transition:all .2s linear;transition:all .2s linear}.wiki-content .edit-wiki-content .preview-icon{position:absolute;right:3.5rem}.wiki-content .edit-wiki-content .action-container{position:absolute;right:1rem;top:.3rem}.wiki-content .edit-wiki-content .edit{position:absolute;right:3.5rem;top:.4rem}.wiki-content .preview{padding-top:1.8rem}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row,.card-placeholder .placeholder-avatar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.basic-table .row,.empty-burndown,.loading-bar{-webkit-box-orient:horizontal}.basic-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #ebebeb;display:flex;-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;padding:.3rem 0;text-align:left;width:100%}.basic-table .row .width-1{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:4;-webkit-flex-grow:4;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:5;-webkit-flex-grow:5;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:7;-webkit-flex-grow:7;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.beta{left:0;position:absolute;top:0;z-index:9999}.button,.button-auth,.button-blackish,.button-bulk,.button-gray,.button-green,.button-red,.trans-button,a.button-gray,a.button-green{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:0 0;border:0;color:#fff;cursor:pointer;display:inline-block;padding:.4rem 2rem;text-align:center;text-transform:uppercase;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.trans-button{font-size:1rem}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button:hover,.trans-button:hover{color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.trans-button span{-webkit-animation:loading .5s linear;animation:loading .5s linear}.button span,.button-auth span,.button-blackish span,.button-bulk span,.button-gray span,.button-green span,.button-red span,.trans-button span{color:#fff}.button .icon,.button-auth .icon,.button-blackish .icon,.button-bulk .icon,.button-gray .icon,.button-green .icon,.button-red .icon,.trans-button .icon{color:#fff;margin-right:.3rem}.trans-button .icon,.trans-button span{color:#050505;-webkit-transition:color .2s linear;transition:color .2s linear}.trans-button.active .icon,.trans-button.active span,.trans-button:hover .icon,.trans-button:hover span{color:#72a114}.trans-button:visited{color:#050505}.submit-button{width:100%}.button-green,a.button-green{background:#72a114}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#9dce0a;color:#fff}.button-gray,a.button-gray{background:#555}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#9dce0a;color:#fff}.button-blackish{background:#050505;color:#f5f5f5}.button-blackish:hover{background:#050505;color:#fff}.button-red{background:#ff8282}.button-red:hover{background:red;color:#fff}.button-red .icon{color:#fff}.button-block{background:#fff;color:red}.button-block:hover{background:#ff8282;color:#fff}.button-bulk{background:#72a114;padding:.35rem .5rem}.button-bulk .icon{margin-right:0}.button-bulk:hover{background:#9dce0a}.button-auth{background:#444}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.card-placeholder{background:#f0f0f0;border:1px dashed #e1e1e1;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:flex}.card-placeholder .image{background:#e1e1e1;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.card-placeholder .line{background:#e1e1e1;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;margin:0}.check{background-color:#dcdcdc;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:500px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.check input+div{background-color:#555;height:25px;-webkit-transition:all .2s linear;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:opensans-regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#9dce0a;margin-left:50%;-webkit-transition:all .2s linear;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.single-filter,.ticket-created-by .created-by .created-title.editable{cursor:pointer}.check input:disabled+div{background-color:#b8b8b8}.ticket-created-by{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;margin-top:.5rem;position:relative}.ticket-created-by .user-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block;line-height:1.5}.ticket-created-by .created-by .created-title{color:#72a114}.ticket-estimation .popover,.ticket-estimation .popover a,.ticket-estimation .popover.fix,.ticket-estimation .popover.fix a,.ticket-estimation .ticket-role-points .role{font-size:.9rem}.ticket-estimation .ticket-role-points .points{font-size:1.6rem}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .points-per-role{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-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}.ticket-estimation .ticket-role-points{background:rgba(184,184,184,.1);border-radius:2px;color:rgba(68,68,68,.3);-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:.1rem;padding:.5rem 0 .1rem;position:relative;text-align:center;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .ticket-role-points.active{background:rgba(157,206,10,.9);color:#f5f5f5}.ticket-estimation .ticket-role-points:first-child{background:rgba(68,68,68,.25);border-radius:0;color:#f5f5f5}.ticket-estimation .ticket-role-points:last-child{border:0}.ticket-estimation .ticket-role-points .points{font-family:opensans-regular,Arial,Helvetica,sans-serif;display:block;text-align:center}.ticket-estimation .ticket-role-points .role{max-width:90%;overflow:hidden;display:inline-block;text-align:center}.ticket-estimation .popover{background:#050505;color:#fff;display:none;left:35%;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#050505;content:'';height:10px;left:10px;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#9dce0a;color:#fff}.ticket-estimation .popover.fix{background:#050505;color:#fff;display:none;left:-160px;list-style-type:none;margin:0;padding:10px;position:absolute;top:105%;width:200px;z-index:99}.ticket-estimation .popover.fix a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#050505;content:'';height:10px;left:90%;position:absolute;top:-5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.single-filter{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem;opacity:.5;position:relative}.single-filter:after{clear:both;content:'';display:table}.single-filter.active,.single-filter.selected,.single-filter:hover{color:#444;opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{background:#dcdcdc;display:block;width:100%}.single-filter .number{background:#c2c2c2;position:absolute;right:0;top:0}.single-filter .icon-delete{color:#444;position:absolute;right:.5rem;top:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.single-filter .icon-delete:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task .avatar a,.kanban-task .task-text,.kanban-task-maximized .task-archived p,.kanban-task-maximized .task-points,.kanban-task-minimized .task-archived{font-size:.9rem}.kanban-task-minimized .icon-drag-h{font-size:1rem}.kanban-task .icon-drag-h,.kanban-task .icon-edit{font-size:1.2rem}.kanban-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.kanban-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.kanban-task:last-child{margin-bottom:0}.kanban-task:hover .icon-drag-h,.kanban-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.kanban-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.kanban-task.ui-sortable-placeholder{background:#444}.kanban-task.blocked{background:red;border:1px solid #c00;color:#fff}.kanban-task.blocked a,.kanban-task.blocked span{color:#fff}.kanban-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.kanban-task .kanban-tagline{border-color:#f1e8cd;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:.6rem}.kanban-task .kanban-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.kanban-task .kanban-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.kanban-task .avatar-wrapper{-webkit-flex-basis:55px;-ms-flex-preferred-size:55px;flex-basis:55px;-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;width:55px}.kanban-task .avatar-wrapper img{width:100%}.kanban-task .avatar a{text-align:center}.kanban-task .avatar img{margin:0 auto}.kanban-task .avatar img:hover{border:2px solid #72a114;-webkit-transition:border .3s linear;transition:border .3s linear}.kanban-task .task-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 .5rem 0 .8rem}.kanban-task .task-assigned{color:#cfc29b;display:block}.kanban-task .task-num{color:#444;margin-right:.3rem}.kanban-task .loading{bottom:.5rem;position:absolute}.kanban-task .icon-drag-h,.kanban-task .icon-edit{color:#f1e8cd;opacity:0;position:absolute;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.kanban-task .icon-drag-h:hover,.kanban-task .icon-edit:hover{color:#e0cd91;-webkit-transition:color .3s linear;transition:color .3s linear}.kanban-task-maximized .task-archived{background:#e8e8e8;padding:.5rem;text-align:left;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived:hover{background:#e1e1e1;-webkit-transition:background .3s linear;transition:background .3s linear}.kanban-task-maximized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-maximized .task-archived span{color:#b8b8b8}.kanban-task-maximized .task-archived p{color:#b8b8b8;margin:0}.kanban-task-maximized .task-archived p:last-child{color:#555;margin:.5rem 0;text-align:center}.kanban-task-maximized .icon-edit,.kanban-task-maximized .loading{bottom:.2rem;right:.5rem}.kanban-task-maximized .icon-drag-h{font-size:2rem;bottom:.2rem;cursor:move;right:45%}.kanban-task-maximized .task-points{color:#e0cd91;margin:0}.kanban-task-maximized .task-points span{display:inline-block}.kanban-task-maximized .task-points span:first-child{padding-right:.2rem}.kanban-task-maximized .task-points .points-text{text-transform:lowercase}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{line-height:1.4;text-transform:none}.kanban-task-maximized .kanban-tag{border-top:.3rem solid}.kanban-task-minimized .kanban-task-inner{padding:0 .3rem}.kanban-task-minimized .task-archived{background:#e8e8e8;padding:.3rem;text-align:left}.kanban-task-minimized .task-archived .task-archived-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.kanban-task-minimized .task-archived span{color:#b8b8b8}.kanban-task-minimized .task-archived .task-name{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-itemtype-project .icon svg,.list-itemtype-ticket .icon svg,.list-itemtype-timeline .icon svg,.list-itemtype-user .icon svg,.loading-spinner{max-height:1rem;max-width:1rem}.kanban-task-minimized .task-archived p{color:#b8b8b8;margin:0}.kanban-task-minimized .task-archived p:last-child{display:none}.kanban-task-minimized .task-num{vertical-align:top}.kanban-task-minimized .task-name{display:inline-block;overflow:hidden;width:135px}.kanban-task-minimized .task-points{display:none}.kanban-task-minimized .icon-drag-h,.kanban-task-minimized .icon-edit{top:1.4rem}.kanban-task-minimized .icon-edit{bottom:.2rem;right:1rem}.kanban-task-minimized .icon-drag-h{cursor:move;right:.1rem;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-task-minimized .kanban-tag{border-top:.2rem solid}.level{background-color:#b8b8b8;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project .list-itemtype-track,.list-itemtype-ticket .list-itemtype-track,.list-itemtype-timeline .list-itemtype-track,.list-itemtype-user .extra-info,.list-itemtype-user .list-itemtype-track{font-size:.9rem}.list-itemtype-ticket h2{font-size:1rem}.list-itemtype-project h2,.list-itemtype-user h2,.loader p{font-size:1.2rem}.list-itemtype-project p,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-project h2,.list-itemtype-ticket h2,.list-itemtype-timeline h2,.list-itemtype-user h2{font-family:opensans-regular,Arial,Helvetica,sans-serif}.list-itemtype-project{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-project h2,.list-itemtype-project p{margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-project-members,.list-itemtype-project .list-itemtype-project-tags{-webkit-align-self:flex-end;-ms-flex-item-align:end;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .list-itemtype-project-members{align-self:flex-end;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-project .list-itemtype-project-tags{align-self:flex-end;display:flex;-webkit-box-flex:3;-webkit-flex:3;-ms-flex:3;flex:3;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:.5rem}.list-itemtype-project .tag{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket h2,.list-itemtype-ticket p,.list-itemtype-timeline p,.list-itemtype-user h2,.list-itemtype-user p{margin-bottom:0}.list-itemtype-ticket,.list-itemtype-timeline,.list-itemtype-user{border-bottom:1px solid #f5f5f5;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user,.list-itemtype-user .list-itemtype-track{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-ticket .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .list-itemtype-avatar img{width:100%}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-project{color:#b8b8b8}.list-itemtype-ticket .list-itemtype-ticket-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-id{color:#b8b8b8;margin-right:.3rem}.list-itemtype-user{display:flex}.list-itemtype-user .list-itemtype-track{color:#b8b8b8;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-user .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .list-itemtype-avatar img{width:100%}.list-itemtype-user .extra-info{margin-top:.25rem}.list-itemtype-timeline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-timeline .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-timeline .list-itemtype-track-likers,.list-itemtype-timeline .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.list-itemtype-timeline .list-itemtype-track-likers .icon,.list-itemtype-timeline .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.list-itemtype-timeline .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-timeline .list-itemtype-track-likers.active,.list-itemtype-timeline .list-itemtype-track-watchers.active{color:#72a114}.list-itemtype-timeline h2{margin-bottom:0}.admin-menu li,.empty-backlog .title,.empty-burndown .title,.sprints-empty .title,.taskboard-table-header .task-colum-name,.ticket-data .ticket-title,.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,tg-project-menu{text-transform:uppercase}.list-itemtype-timeline .list-itemtype-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.loader p{color:#555;text-align:center}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar,.notification-light{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.loading-bar{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:flex;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:loadBar;animation-name:loadBar;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;background:#555;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{-webkit-animation-delay:0s;animation-delay:0s;background:#bbe831}.loading-bar .item-1{-webkit-animation-delay:1s;animation-delay:1s;background:#237400}.loading-bar .item-2{-webkit-animation-delay:2s;animation-delay:2s;background:#e43050}.loading-bar .item-3{-webkit-animation-delay:3s;animation-delay:3s;background:#810061}.loading-bar .item-4{-webkit-animation-delay:4s;animation-delay:4s;background:#618000}.loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}a.help-button,a.help-markdown{font-size:.9rem;color:#b8b8b8}a.help-button:hover span,a.help-markdown:hover span{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button:hover .icon,a.help-markdown:hover .icon{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}a.help-button .icon,a.help-markdown .icon{color:#b8b8b8;margin-right:.2rem}.markItUpHeader ul{background:#f5f5f5;padding:.3rem}.markItUpHeader ul li{display:inline-block;float:none}.markItUpHeader ul li a{opacity:.8}.markItUpHeader ul li a:hover{opacity:.3;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.markItUpHeader ul .preview-icon{position:absolute;right:2.5rem}.markItUpContainer{padding:0}.markdown{position:relative}.preview .actions{background:#f5f5f5;margin-top:.5rem;min-height:2rem;padding:.3rem}.notification-light p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.notification-message-success .warning{font-size:1.2rem;color:#fff;line-height:1.2}.notification-message-error .warning{font-size:2rem;color:#fff;line-height:2.4rem}.notification-message-error .icon-notification-error{font-size:3rem;display:inline;vertical-align:sub}.notification-message-error .warning,.notification-message-success .warning{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.notification-message-success{background:rgba(157,206,10,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);opacity:1;right:-370px;top:2%;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{-webkit-animation:animSlide 2s linear both;animation:animSlide 2s linear both;opacity:1}.notification-message-success p{margin:0}@-webkit-keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlide{0%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{-webkit-transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1);transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{-webkit-transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1);transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{-webkit-transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1);transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{-webkit-transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1);transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{-webkit-transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1);transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{-webkit-transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1);transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}60.56%{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400.01,0,0,1)}82.78%{opacity:1;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-light,.notification-message-error{-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%)}.notification-message-error{background:rgba(255,0,0,.9);top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error.inactive{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-light p,.notification-message-error .text p{margin:0}.notification-message-error .icon-delete{color:#fff;position:absolute;right:1rem;top:1rem}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(184,184,184,.95);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;padding:1rem;position:absolute;top:0;transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s;width:100%;z-index:99999}.paginator ul,.summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.notification-light.inactive{opacity:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .6s;transition:all .6s}.notification-light.active{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .6s;transition:all .6s}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{margin-right:1rem;width:2rem}.notification-light .close path{fill:#fff}.notification-message-light-error{background:rgba(255,0,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator .dots,.paginator a{background:#b8b8b8;color:#fff;padding:.5rem 1rem;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator a:hover{background:#050505;color:#fff;-webkit-transition:all .3s linear;transition:all .3s linear}.paginator .active span{background:#9dce0a}.paginator .dots{background:0 0;color:#b8b8b8}.v-pagination-list{overflow:hidden}.v-pagination-next,.v-pagination-previous{background-color:#555;color:#f5f5f5;display:block;padding:.1rem 0;text-align:center;visibility:hidden;width:100%}.select-color,.select-color:after{background:#050505;position:absolute}.v-pagination-next:hover,.v-pagination-previous:hover{background-color:#050505;-webkit-transition:background .3s linear;transition:background .3s linear}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.private{display:inline-block;margin-left:.5rem;width:.5rem}.private svg{height:.5rem;width:.5rem}.private path{fill:#b8b8b8;-webkit-transition:fill .3s linear;transition:fill .3s linear}.select-color,.select-color a{font-size:.9rem}.select-color input{font-size:1rem}.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;border-radius:0 10px 10px 0;padding:15px}.select-color a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#b8b8b8;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background-color:#f5f5f5;width:243px}.select-color input::-webkit-input-placeholder{color:#555}.select-color input::-moz-placeholder{color:#555}.select-color input:-moz-placeholder{color:#555}.select-color input:-ms-input-placeholder{color:#555}.select-color .selected-color{background:#b8b8b8;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary .description{font-size:.9rem}.empty-burndown .title{font-size:1.2rem}.empty-burndown,.empty-burndown .title,.summary .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.empty-burndown a,.summary .number{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.summary{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;padding:1em}.summary .summary-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#9dce0a}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{line-height:1}.summary .stats{cursor:pointer;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .color-line,.summary .stats:hover .graph{fill:#9dce0a;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats.active .color-line,.summary .stats.active .white-line{display:none}.summary .stats.active .graph{fill:#72a114}.summary .stats svg{height:100%;width:100%}.summary .stats .color-line,.summary .stats .graph{fill:#858585;-webkit-transition:fill .2s;transition:fill .2s}.summary .stats .white-line{fill:#444}.summary .stats .color-line,.summary .stats .white-line{display:block}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#9dce0a;height:24px}.summary-progress-bar .defined-points{background:#ff8282;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#9dce0a;height:24px;position:absolute}.large-summary{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.large-summary .large-summary-wrapper{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.large-summary .summary-progress-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.empty-burndown,.taskboard-task .taskboard-tagline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.large-summary .summary-progress-bar{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats-divider{margin-right:2rem}.large-summary .icon{font-size:1.4rem;margin-right:.4rem}.large-summary .icon.icon-stats{color:#72a114;float:right;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#9dce0a}.large-summary .icon.icon-stats.active:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.empty-burndown{-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;background:rgba(135,155,137,.15);display:flex;-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;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{-webkit-flex-basis:5rem;-ms-flex-preferred-size:5rem;flex-basis:5rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;width:5rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.empty-burndown .title{color:#879b89;margin:0}.empty-burndown path{fill:#879b89}.empty-burndown a{-webkit-animation:blink 2s infinite;animation:blink 2s infinite}.graphics-container{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.wysiwyg,.wysiwyg .codehilite{overflow:auto}.graphics-container.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;-webkit-transition:none;transition:none}.tag,.tags-block .add-tag-text,.tags-block .tag{font-size:.9rem}.tags-block .icon-plus{font-size:1.2rem}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-radius:0 5px 5px 0;color:#444;display:inline-block;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.tag .icon-delete{color:#b8b8b8;margin-left:1rem}.tag .icon-delete:hover{color:red}.ui-autocomplete{background:#fff;border:1px solid #b8b8b8;z-index:99910}.ui-autocomplete .ui-state-focus{background:#9dce0a}.ui-autocomplete li{cursor:pointer}.ui-helper-hidden-accessible{display:none}.tags-block .tags-container{display:inline-block}.tags-block input{padding:.4rem;width:14rem}.tags-block .tag{margin:0 .5rem .5rem 0;padding:.5rem}.tags-block .add-tag{color:#b8b8b8}.tags-block .add-tag:hover{color:#9dce0a}.taskboard-task .task-assigned,.taskboard-task .taskboard-text,.taskboard-task .taskboard-user-avatar a{font-size:.9rem}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit,.taskboard-task .icon-iocaine{font-size:1.2rem}.taskboard-task .task-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.taskboard-task{background:#fff8e4;border:1px solid #f1e8cd;box-shadow:none;cursor:move;margin:.2rem;position:relative}.taskboard-task:hover .icon-drag-h,.taskboard-task:hover .icon-edit{color:#cfc29b;display:block;opacity:1;-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task.ui-sortable-helper{box-shadow:1px 1px 15px rgba(0,0,0,.4);-webkit-transition:box-shadow .3s linear;transition:box-shadow .3s linear}.taskboard-task.ui-sortable-placeholder{background:#444}.taskboard-task.blocked{background:red;border:1px solid #c00;color:#fff}.taskboard-task.blocked a,.taskboard-task.blocked span,.taskboard-task.blocked:hover .icon-drag-h,.taskboard-task.blocked:hover .icon-edit{color:#fff}.taskboard-task.card-placeholder{background:#f0f0f0;border:3px dashed #e1e1e1;cursor:default}.taskboard-task .taskboard-tagline{border-color:#f1e8cd;display:flex;height:.6rem}.taskboard-task .taskboard-tag{border-top:.3rem solid #f1e8cd;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:.6rem;z-index:90}.taskboard-task .taskboard-task-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.taskboard-task .taskboard-user-avatar{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:55px}.taskboard-task .taskboard-user-avatar a{display:block;text-align:center}.taskboard-task .taskboard-user-avatar img{margin:0 auto}.taskboard-task .taskboard-user-avatar img:hover{border:2px solid #72a114;-webkit-transition:border .3s linear;transition:border .3s linear}.taskboard-task .iocaine img{-webkit-filter:hue-rotate(150deg) saturate(200%);filter:hue-rotate(150deg) saturate(200%)}.taskboard-task .icon-iocaine{background:#000;border-radius:5px;color:#fff;left:.2rem;padding:.1rem;position:absolute;top:1rem}.taskboard-task .task-assigned{color:#cfc29b;display:block}.taskboard-task .task-assigned:hover{color:#72a114}.taskboard-task .task-num{color:#444;margin-right:.5em}.taskboard-task .taskboard-text{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;padding:0 .5rem 0 1rem;word-wrap:break-word}.taskboard-task .icon{-webkit-transition:color .3s linear,opacity .3s linear;transition:color .3s linear,opacity .3s linear}.taskboard-task .loading{bottom:.5rem;position:absolute}.taskboard-task .icon-drag-h,.taskboard-task .icon-edit{bottom:.5rem;color:#f1e8cd;opacity:0;position:absolute}.taskboard-task .icon-drag-h:hover,.taskboard-task .icon-edit:hover{color:#cfc29b}.taskboard-task .icon-edit,.taskboard-task .loading{right:1rem}.taskboard-task .icon-drag-h{font-size:2rem;cursor:move;right:45%}.task-drag{box-shadow:1px 1px 15px 6px rgba(0,0,0,.1)}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative}.track-button .track-inner{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border-radius:4px 0 0 4px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;margin-right:.1rem;min-width:140px}.track-button .track-button-counter,.watch-options a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.track-button .track-inner:hover{background:#e8e8e8;-webkit-transition:background .3s;transition:background .3s}.track-button .track-inner span{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.track-button .track-inner .icon-arrow-up{margin-left:auto;padding:0 .5rem;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.track-button:hover{color:#050505}.track-button.active .track-inner{background:rgba(157,206,10,.2)}.track-button.active .track-icon path{fill:#72a114}.track-button.watch-container{margin-right:1rem;position:relative}.track-button .track-icon{padding:.3rem .6rem .3rem .75rem}.track-button .track-icon svg{height:1.1rem;position:relative;top:2px;width:1.1rem}.track-button .track-icon path{fill:#444}.track-button .track-button-counter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-width:2rem}.like-button.active.is-hover .track-inner,.watch-button.active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.like-button.active.is-hover path,.watch-button.active.is-hover path{fill:#ff8282}.watch-options{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.admin-project-export-result .spin img,.ticket-assigned-to .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.watch-options li{margin:0}.assigned-to-list,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid rgba(184,184,184,.3);color:#fff;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.watch-options a.active{color:#9dce0a}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check path{fill:#9dce0a}.upvote-btn{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#b8b8b8;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#879b89;-webkit-transition:background .3s;transition:background .3s}.upvote-btn a:hover path{fill:#879b89}.upvote-btn a.active{background:rgba(157,206,10,.2);color:#72a114;-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.active path{fill:#72a114}.upvote-btn a.is-hover{background:red;color:#f5f5f5}.upvote-btn a.is-hover svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .3s;transition:all .3s}.upvote-btn a.is-hover path{fill:#ff8282}.upvote-btn svg{height:1rem;width:1rem}.upvote-btn span{display:block}.upvote-btn path{fill:#b8b8b8}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#444;margin-left:.5rem}.assigned-to-list .user-list-single,.ticket-watchers .user-list-single{-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;background:0 0;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem .5rem .3rem;vertical-align:middle}.assigned-to-list .user-list-single:last-child,.ticket-watchers .user-list-single:last-child{border:0}.assigned-to-list .user-list-avatar,.ticket-watchers .user-list-avatar{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.assigned-to-list .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{background:#edfad4;cursor:pointer;margin-bottom:1rem;position:relative;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.1s;transition-delay:.1s}.assigned-to-list .user-list-single.is-active .icon-delete{opacity:1;position:absolute;right:1rem;top:1.3rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-single:hover .icon-delete{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.ticket-watchers .user-list-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.ticket-watchers .icon-delete{opacity:0;position:absolute;right:.5rem;top:0;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.ticket-watchers .icon-delete:hover{color:red;-webkit-transition:color .3s ease-in;transition:color .3s ease-in}.wysiwyg code,.wysiwyg pre{font-size:.9rem}.wysiwyg h2{font-size:1.2rem;margin-bottom:.5rem}.wysiwyg h1{font-size:2rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.wysiwyg h2,.wysiwyg h3{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.wysiwyg{line-height:1.4rem;padding:1rem}.wysiwyg h1{line-height:2.5rem}.wysiwyg ol,.wysiwyg ul{list-style-position:outside;margin-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#72a114}.wysiwyg a:hover{color:#9dce0a}.wysiwyg p{line-height:1.4rem;margin-bottom:1rem}.wysiwyg code,.wysiwyg pre{background:#5e5e5e;color:#f5f5f5;direction:ltr;font-family:'courier new',monospace;margin-bottom:1rem;overflow:auto;unicode-bidi:embed;white-space:pre}.admin-functionalities .functionality .title,.admin-membership-table .avatar .name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-membership-table .avatar figcaption span,.admin-submenu ul a span,.admin-submenu-roles .single-role,.admin-webhooks .webhook-url span,.custom-fields-table .custom-description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wysiwyg pre{line-height:1.4rem;padding:.5rem}.wysiwyg table{border:1px solid #b8b8b8;margin-bottom:1rem}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#b8b8b8 1px solid}.wysiwyg th{border-right:#b8b8b8 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#b8b8b8 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#b8b8b8;margin-bottom:2rem}.admin-common .total{font-size:1.2rem;background-color:#f5f5f5;color:#444;padding:.3rem 1rem}.admin-common .total:hover .edit-value{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0;padding:.5rem 0}.custom-fields-table .table-header{border-bottom:3px solid #f5f5f5}.custom-fields-table .table-header .custom-description span,.custom-fields-table .table-header .custom-name span{padding-left:1.1rem}.custom-fields-table .table-body form:last-child .row{border:0}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;-webkit-transition:background .2s linear;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag-v{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .table-body .custom-description{color:#b8b8b8}.custom-fields-table .single-custom-field{border-bottom:1px solid #f5f5f5;color:#555}.custom-fields-table .icon-drag-v{color:#b8b8b8;opacity:0;padding:0 .1rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .icon-drag-v:hover{color:#555;cursor:move;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{color:#555;margin-right:.5rem}.custom-fields-table .custom-name{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-description{max-width:100%;-webkit-flex-basis:50%;-ms-flex-preferred-size:50%;flex-basis:50%;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-webkit-flex-basis:25%;-ms-flex-preferred-size:25%;flex-basis:25%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.custom-fields-table .custom-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-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;opacity:0;text-align:center}.custom-fields-table .custom-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.custom-fields-table .custom-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.custom-fields-table form .custom-options-wrapper{opacity:1}.admin-functionalities form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.admin-functionalities .functionality{-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;background-color:#f5f5f5;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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:.3rem;margin-right:.3rem;opacity:.5;padding:1rem;position:relative;-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:top;width:32%}.admin-functionalities .functionality.active{background-color:rgba(114,161,20,.3);opacity:1}.admin-functionalities .functionality .icon{font-size:3rem;-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;margin:0 auto;min-width:60px}.admin-functionalities .functionality .desc{text-align:center;width:100%}.admin-functionalities .functionality .activate-input{display:none}.admin-functionalities .functionality .activate-input+label{color:#fff;cursor:pointer;display:block;text-align:center}.admin-functionalities .functionality .title{display:block}.admin-functionalities .functionality select{margin-top:1rem}.admin-functionalities .videoconference-attributes select{margin-bottom:.5rem}.admin-functionalities .button-green{color:#fff;display:block;text-align:center}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.admin-membership-table .avatar figcaption{margin-left:1rem;width:75%}.admin-membership-table .avatar figcaption span{width:100%}.admin-membership-table .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:35px}.admin-membership-table .avatar .email,.admin-membership-table .avatar .name{display:block;width:100%}.admin-membership-table .avatar .email{color:#b8b8b8}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#f5f5f5}.admin-membership-table .resend{background-color:#72a114;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;-webkit-transition:background-color .3s linear;transition:background-color .3s linear}.admin-membership-table .delete{font-size:1.2rem;color:#b8b8b8}.admin-membership-table .delete:hover{color:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-webkit-flex-basis:210px;-ms-flex-preferred-size:210px;flex-basis:210px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.admin-menu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #dcdcdc}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-result .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{width:100%}.admin-project-export-result h3{font-size:1.2rem;font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#b8b8b8;margin:.5rem 0;text-align:center}.project-details .privacy-settings label,.project-details input,.project-details label,.project-details textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.project-details form{max-width:700px;width:100%}.project-details fieldset{margin-bottom:1rem}.project-details label{display:block;margin-bottom:.2rem}.project-details textarea{height:10rem}.project-details .privacy-settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.project-details .privacy-settings>div{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;position:relative}.project-details .privacy-settings>div:first-child{margin-right:.5rem}.project-details .privacy-settings label{border:1px solid #b8b8b8;cursor:not-allowed;display:block;text-align:center;-webkit-transition:all .2s linear;transition:all .2s linear}.project-details .privacy-settings label span{color:#b8b8b8}.project-details .privacy-project{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:500px;z-index:999}.project-details .privacy-project:checked+label{background:#9dce0a;border:1px solid #9dce0a}.project-details .privacy-project:checked+label span{color:#fff}.project-details .button-green{color:#fff;display:block;text-align:center}.project-details .delete-project{font-size:.9rem;display:block;margin-top:1rem}.admin-roles .general-category{font-size:.9rem}.admin-roles .edit-value{font-size:1rem}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-roles .edit-value{color:#b8b8b8;cursor:pointer;margin-left:.5rem;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-roles .edit-role{background-color:#f5f5f5;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .edit-role .icon-floppy{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .edit-role .icon-floppy:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;display:inline-block}.admin-submenu li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.admin-contrib .help .alt-image,.admin-contrib .help code,.admin-contrib .select-input-text .help-copy,.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-body span,.admin-webhooks .history-single-response-header a{font-size:.9rem}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;-webkit-transition:all .2s;transition:all .2s}.admin-submenu ul a span{display:block;max-width:85%}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child,.admin-webhooks .table-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body .response-container,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-webhooks .table-header{border-bottom:1px solid #b8b8b8}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #f5f5f5}.admin-webhooks .webhooks-options{margin-bottom:1rem;text-align:right}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.admin-webhooks .webhook-url{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:8;-webkit-flex-grow:8;-ms-flex-positive:8;flex-grow:8}.admin-webhooks .webhook-url span{max-width:65%;color:#b8b8b8;display:inline-block;vertical-align:middle}.admin-contrib .help code,.admin-third-parties .help code{direction:ltr;line-height:1.4rem;unicode-bidi:embed;white-space:pre}.admin-webhooks .webhook-url a{color:#72a114;margin-left:.5rem}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;min-width:100px;text-align:center}.admin-webhooks .webhook-options a{color:#b8b8b8;margin-right:.5rem;-webkit-transition:color .2s linear;transition:color .2s linear;vertical-align:middle}.admin-webhooks .webhook-options a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{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-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .webhooks-history.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #f5f5f5;margin-left:22%}.admin-webhooks .history-single{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);-webkit-transition:background .2s linear;transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s linear;transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header a,.admin-webhooks .history-single-response-header span:first-child{color:#b8b8b8}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{-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;background:#f5f5f5;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-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.backlog-table-body,.backlog-table-header,.kanban-table,.taskboard-table,.wiki-summary .wiki-user-modification{-webkit-box-orient:vertical;-webkit-box-direction:normal}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{color:#b8b8b8;-webkit-flex-basis:20%;-ms-flex-preferred-size:20%;flex-basis:20%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{border:0;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib h2,.admin-contrib label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.admin-contrib .help h3,.admin-contrib .help ol span{font-family:opensans-semibold}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #f5f5f5;margin-bottom:1rem;padding-bottom:1rem}.admin-contrib .contrib-input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.admin-contrib .contrib-test{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:7.5rem;-ms-flex-preferred-size:7.5rem;flex-basis:7.5rem;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-left:.5rem;text-align:center}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .contrib-form-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-contrib .select-input-text .help-copy{opacity:0}.admin-contrib .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-contrib .check-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0}.admin-contrib .help{margin-top:2rem}.admin-contrib .help h3{margin-bottom:1rem}.admin-contrib .help ol{padding:0 0 0 2rem}.admin-contrib .help .img{margin-bottom:1rem}.admin-contrib .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-contrib .help .code-info{padding-left:1rem}.admin-contrib .help .code-info li{margin-bottom:.5rem}.admin-contrib .help .code-info span{font-family:opensans-semibold}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv .csv-regenerate-field a{font-size:.9rem;min-width:110px}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field .icon{margin-right:.3rem}.project-csv .field-with-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:1rem;width:100%}.project-csv .field-with-options input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row .icon,.project-values-settings a{font-size:1.2rem}.admin-third-parties .help .alt-image,.admin-third-parties .help code,.admin-third-parties .select-input-text .help-copy,.backlog-table-body .doom-line span,.backlog-table-body .pop-points,.backlog-table-body .pop-points a,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open a,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-body .pop-role,.backlog-table-body .pop-role a,.backlog-table-body .pop-status,.backlog-table-body .pop-status a,.backlog-table-body .row,.backlog-table-body .tags-block .tag,.backlog-table-header .pop-points,.backlog-table-header .pop-points a,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open a,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom a,.backlog-table-header .pop-role,.backlog-table-header .pop-role a,.backlog-table-header .pop-status,.backlog-table-header .pop-status a,.backlog-table-header .row,.login-form-container .forgot-pass,.register-form-container .register-text{font-size:.9rem}.project-values-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{color:#b8b8b8;opacity:0}.project-values-row .icon:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.project-values-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #f5f5f5}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-header .points,.login-form-container .remember-me+label{cursor:pointer}.project-values-body .project-values-row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.project-values-name{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.project-values-value{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{color:#555;margin-right:.5rem}.project-values-settings a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.project-values-settings a:hover .icon-delete{color:red}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.admin-third-parties .help h3,.admin-third-parties .help ol span{font-family:opensans-semibold}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p,.change-password-text{color:#444;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #b8b8b8;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.admin-third-parties .help{margin-top:2rem}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties .help h3{margin-bottom:1rem}.admin-third-parties .help ol{padding:0 0 0 2rem}.admin-third-parties .help .img{margin-bottom:1rem}.admin-third-parties .help code{background:#f5f5f5;display:block;font-family:'courier new',monospace;margin-bottom:1rem;padding:.5rem;width:100%}.admin-third-parties .help .code-info li,.cancel-account p{margin-bottom:.5rem}.admin-third-parties .help .code-info{padding-left:1rem}.admin-third-parties .help .code-info span{font-family:opensans-semibold}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-email-form p{margin-bottom:.5rem}.change-password-form-container .token-change-password{position:relative}.change-password-form-container input:focus+.get-token{opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.change-password-form-container .get-token{font-size:.9rem;color:#b8b8b8;opacity:1;position:absolute;right:1rem;top:.5rem;-webkit-transition:all .3s linear;transition:all .3s linear}.change-password-form-container .get-token:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.login-form-container .forgot-pass{color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;-webkit-transition:all .3s linear;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.login-form-container .remember-me{vertical-align:top}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin-bottom:1rem;text-align:center}.backlog-table-header .backlog-table-title{font-size:1rem}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a,.empty-backlog .title{font-size:1.2rem}.backlog-table-body .doom-line span{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.backlog-table-body .pop-points,.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-body .user-story-name a,.backlog-table-header .pop-points,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom,.backlog-table-header .pop-role,.backlog-table-header .pop-status,.empty-backlog{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.backlog-table-body,.backlog-table-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-subtitle:hover,.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-subtitle:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-subtitle .input,.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-subtitle .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-webkit-flex-basis:25px;-ms-flex-preferred-size:25px;flex-basis:25px;-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}.backlog-table-body .backlog-table-subtitle .votes,.backlog-table-body .backlog-table-title .votes,.backlog-table-body .row .votes,.backlog-table-header .backlog-table-subtitle .votes,.backlog-table-header .backlog-table-title .votes,.backlog-table-header .row .votes{color:#555;-webkit-flex-basis:65px;-ms-flex-preferred-size:65px;flex-basis:65px;-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-align:center}.backlog-table-body .backlog-table-subtitle .votes.inactive,.backlog-table-body .backlog-table-title .votes.inactive,.backlog-table-body .row .votes.inactive,.backlog-table-header .backlog-table-subtitle .votes.inactive,.backlog-table-header .backlog-table-title .votes.inactive,.backlog-table-header .row .votes.inactive{color:#b8b8b8}.backlog-table-body .backlog-table-subtitle .votes.is-voted,.backlog-table-body .backlog-table-title .votes.is-voted,.backlog-table-body .row .votes.is-voted,.backlog-table-header .backlog-table-subtitle .votes.is-voted,.backlog-table-header .backlog-table-title .votes.is-voted,.backlog-table-header .row .votes.is-voted{color:#9dce0a}.backlog-table-body .backlog-table-subtitle .user-stories,.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-subtitle .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{overflow:hidden;width:100%}.backlog-table-body .backlog-table-subtitle .status,.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-subtitle .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-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}.backlog-table-body .backlog-table-subtitle .points,.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-subtitle .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-webkit-flex-basis:125px;-ms-flex-preferred-size:125px;flex-basis:125px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point,.empty-backlog,.sprints .loading,.sprints .sprint-table .sprint-empty{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{color:#b8b8b8;margin-left:.2rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px 3rem 10px 10px;position:absolute;width:150px;z-index:99}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:0;width:200px;z-index:99}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{background:#050505;bottom:0;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;top:auto;width:200px;z-index:99}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .user-story-name,.sprints .sprint-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:opensans-regular,Arial,Helvetica,sans-serif;border-bottom:2px solid #b8b8b8;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:30px}.backlog-table-header .header-points span{color:#b8b8b8}.backlog-table-body .row{border-bottom:1px solid #ebebeb;cursor:move;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in;-webkit-transition-delay:.2s;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag-v,.backlog-table-body .row:hover .us-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .is-checked,.backlog-table-body .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.backlog-table-body .user-story-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .doom-line{background:red;margin:.2rem 0;padding:.6rem 0;position:relative;width:100%}.backlog-table-body .doom-line span{color:#fff;position:absolute;right:.5rem;top:-3px}.backlog-table-body .icon-drag-v,.backlog-table-body .us-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in;width:30px}.backlog-table-body .icon-drag-v:hover,.backlog-table-body .us-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.backlog-table-body .us-settings{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 0 0 2rem;opacity:0}.backlog-table-body .icon-drag-v{cursor:move;opacity:0;padding:.1rem .5rem 0 0}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.empty-backlog{padding:2rem}.empty-backlog img{margin-bottom:1rem}.empty-backlog .title{margin-bottom:.5rem}.empty-backlog a{color:#72a114}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint .description{font-size:.75rem}.sprints .filter-closed-sprints,.sprints .sprint-table .column-us,.sprints .us-item-row .user-story-name{font-size:.9rem}.sprints .sprint .number,.sprints .sprint .sprint-date,.sprints .sprint-name a,.sprints-empty .title{font-size:1.2rem}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint-header{-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;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#72a114;padding:.25rem .25rem 0;-webkit-transition:background .2s;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{height:1.4rem;width:1.5rem}.sprints .add-sprint path{fill:#f5f5f5}.sprints .filter-closed-sprints{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading-spinner{border:0;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.sprints .sprint-name a{max-width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;margin-right:3px}.sprints .sprint{margin-bottom:2rem;overflow:hidden}.sprints .sprint header{position:relative}.sprints .sprint:hover .icon-edit{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.sprints .sprint .icon{display:inline-block}.sprints .sprint .icon-arrow-up{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:baseline}.sprints .sprint .icon-arrow-up.active{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.sprints .sprint .icon-arrow-up:hover{color:#9dce0a;-webkit-transition:color .2s linear;transition:color .2s linear}.sprints .sprint .icon-edit{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;vertical-align:baseline}.sprints .sprint .icon-edit:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.sprints .sprint .description{line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{color:#b8b8b8;-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1}.sprints .sprint .sprint-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.sprints .sprint ul{margin:0}.sprints .sprint li{display:inline-block}.sprints .sprint li:first-child{margin-right:3px}.sprints .sprint-progress-bar{background:#b8b8b8;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#72a114;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table .sprint-empty{background:#e6e6e6;border:2px dashed #d2d2d2;color:#555;padding:1rem}.sprints .sprint-table .row{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:#d7d7d7;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .row.readonly,.taskboard-table .taskboard-task.readonly{cursor:auto}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.sortable-placeholder{background:#d7d7d7;height:40px}.sprints .sprint-table .row.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.sprints .sprint-table .column-us{-webkit-flex-flow:3;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.sprints .sprint-table .us-name.closed{color:#c5c5c5}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#c5c5c5}.sprints .sprint-table .column-points.blocked{color:red}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .icon-drag-v,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input,.taskboard-table-body .column-fold .taskboard-task .icon,.taskboard-table-body .column-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .column-fold .taskboard-task .taskboard-text,.taskboard-table-body .row-fold .taskboard-task .icon,.taskboard-table-body .row-fold .taskboard-task .taskboard-tagline,.taskboard-table-body .row-fold .taskboard-task .taskboard-text{display:none}.sprints .us-item-row .user-story-name{line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#b8b8b8}.sprints-empty a,.taskboard-table-header .task-colum-name .icon:hover{color:#72a114}.sprint-closed .sprint-progress-bar .current-progress{background:#9f9f9f}.sprint-closed .button-gray{background:#b8b8b8}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{margin-bottom:.5rem}.taskboard-userstory-box .points-value{font-size:.9rem}.taskboard-table-header .task-colum-name .icon{font-size:1rem}.taskboard-table-header .task-colum-name,.taskboard-userstory-box .us-title{font-size:1.2rem}.taskboard-table-body .column-fold .taskboard-task,.taskboard-table-body .row-fold .taskboard-task{background:0 0;border:0;margin:0;min-height:0}.taskboard-table-body .column-fold .taskboard-task .taskboard-task-inner,.taskboard-table-body .row-fold .taskboard-task .taskboard-task-inner{padding:.2rem}.taskboard-table-body .column-fold .taskboard-task .avatar,.taskboard-table-body .row-fold .taskboard-task .avatar{height:35px;width:35px}.taskboard-table-body .column-fold .taskboard-task.ui-sortable-helper,.taskboard-table-body .row-fold .taskboard-task.ui-sortable-helper{box-shadow:none}.taskboard-table-body .column-fold .task-column,.taskboard-table-body .row-fold .task-column,.taskboard-table-body .task-column.column-fold,.taskboard-table-body .task-column.row-fold{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start;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-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link,.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table,.taskboard-table-header .taskboard-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;overflow:hidden}.taskboard-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;width:100%}.taskboard-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:flex;position:absolute}.taskboard-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;width:300px}.taskboard-table-header .task-colum-name:last-child{margin-right:0}.taskboard-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-header .task-colum-name .icon.hfold,.taskboard-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.taskboard-table-header .task-colum-name.column-fold{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table-header .task-colum-name.column-fold span{display:none}.taskboard-table-header .task-colum-name.column-fold .hfold,.taskboard-table-header .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table-body{height:100%;overflow:auto;width:100%}.taskboard-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin:0 10px 0 0;max-width:300px;width:300px}.taskboard-table-body .task-column:last-child{margin-right:0}.taskboard-table-body .column-fold .taskboard-task{max-width:40px;width:40px}.taskboard-table-body .task-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;min-height:10rem;width:100%}.taskboard-table-body .avatar-task-link,.taskboard-table-body .task-row.row-fold .icon-bulk,.taskboard-table-body .task-row.row-fold .icon-plus,.taskboard-table-body .task-row.row-fold .points-value{display:none}.taskboard-table-body .task-row:hover .new-task{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.taskboard-table-body .task-row.blocked .taskboard-userstory-box{background:rgba(255,0,0,.6)}.taskboard-table-body .task-row.blocked .points-value,.taskboard-table-body .task-row.blocked .points-value:hover,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a,.taskboard-table-body .task-row.blocked .taskboard-userstory-box a:hover{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.taskboard-table-body .task-row.blocked .taskboard-tasks-box{background:rgba(255,0,0,.1)}.taskboard-table-body .task-row.row-fold{min-height:0}.taskboard-table-body .task-row.row-fold .us-title{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskboard-table-body .taskboard-userstory-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-table-body .taskboard-userstory-box .icon{color:#b8b8b8;position:absolute;right:.5rem;top:.7rem;-webkit-transition:color .2s linear;transition:color .2s linear}.taskboard-table-body .taskboard-userstory-box .icon:hover{color:#72a114}.taskboard-table-body .taskboard-userstory-box .icon.icon-plus{right:2rem}.taskboard-table-body .taskboard-userstory-box .icon.icon-vfold,.taskboard-table-body .taskboard-userstory-box .icon.icon-vunfold{left:0;right:inherit}.taskboard-table-body .avatar-assigned-to{display:block}.taskboard-userstory-box{position:relative}.taskboard-userstory-box .tag-list{display:none;margin-bottom:1rem}.attachments-header,.ticket-assigned-to{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.taskboard-userstory-box .us-title{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-userstory-box .points-value{color:#b8b8b8}.taskboard-userstory-box .points-value span{margin-right:.1rem}.points-list a{color:#72a114;margin-left:.5rem}.points-list a:hover span{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.points-list span{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem}.ticket-assigned-to{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;margin-bottom:1rem;position:relative}.ticket-assigned-to:hover .assigned-to .icon-delete{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;margin:1rem auto;max-height:2rem;max-width:2rem}.attachments,.duty-custom-fields{margin-bottom:2rem}.ticket-assigned-to .user-avatar{-webkit-flex-basis:4rem;-ms-flex-preferred-size:4rem;flex-basis:4rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .assigned-to{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.attachments-header .attachments-title,.colors-table .table-header,.single-attachment .attachment-name{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.ticket-assigned-to .assigned-to .user-assigned{font-size:1.2rem;color:#72a114;cursor:default;line-height:1.5rem}.ticket-assigned-to .assigned-to .user-assigned.editable{cursor:pointer}.ticket-assigned-to .assigned-to .user-assigned .icon{vertical-align:middle}.ticket-assigned-to .assigned-to .assigned-name{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ticket-assigned-to .assigned-to .icon-delete{color:#b8b8b8;opacity:0;position:absolute;right:0;top:0}.ticket-assigned-to .assigned-to .icon-delete:hover{color:red}.add-attach span,.more-attachments,.single-attachment,.single-attachment .editable-attachment-comment{font-size:.9rem}.attachments-header .attachments-title{font-size:1rem;color:#444}.attachments-header .icon,.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings,.single-attachment .icon-delete{font-size:1.2rem}.attachments-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.attachments-header .attachments-num,.attachments-header .attachments-text{margin-right:.1rem}.attachments-header .icon{color:#444;cursor:pointer}.attachments-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.single-attachment{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem 1rem;position:relative}.category-config,.more-attachments{border-bottom:1px solid #b8b8b8}.single-attachment:hover .attachment-settings .settings{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.single-attachment.ui-sortable-helper{background:#f6fceb;box-shadow:1px 1px 10px rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.single-attachment.deprecated,.single-attachment.deprecated .attachment-name a{color:#b8b8b8}.single-attachment.sortable-placeholder{background:#f5f5f5;height:40px}.single-attachment .attachment-name{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:1rem}.single-attachment .attachment-name .icon{margin-right:.5rem}.single-attachment .attachment-size{color:#b8b8b8;-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem}.single-attachment .attachment-comments,.single-attachment .editable-attachment-comment{-webkit-flex-basis:35%;-ms-flex-preferred-size:35%;flex-basis:35%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-comments span,.single-attachment .editable-attachment-comment span{color:#555}.single-attachment .attachment-settings{-webkit-flex-basis:15%;-ms-flex-preferred-size:15%;flex-basis:15%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.single-attachment .attachment-settings .editable-settings,.single-attachment .attachment-settings .settings{color:#b8b8b8;display:block;position:absolute}.single-attachment .attachment-settings .editable-settings:hover,.single-attachment .attachment-settings .settings:hover{color:#72a114}.single-attachment .attachment-settings .settings{opacity:0;top:.5rem}.single-attachment .attachment-settings .editable-settings{opacity:1;top:1rem}.single-attachment .attachment-settings .icon-edit,.single-attachment .attachment-settings .icon-floppy{right:3.5rem}.single-attachment .attachment-settings .icon-delete{right:2rem}.single-attachment .attachment-settings .icon-delete:hover{color:red}.single-attachment .attachment-settings .icon-drag-v{cursor:move;right:0}.single-attachment .icon-delete{color:#b8b8b8}.single-attachment .icon-delete:hover{color:red}.single-attachment .editable-attachment-deprecated{padding-left:1rem}.single-attachment .editable-attachment-deprecated span{color:#b8b8b8}.single-attachment .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.single-attachment .editable-attachment-deprecated input:checked+span{color:#444}.single-attachment .percentage{background:rgba(114,161,20,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.more-attachments{display:block;padding:1rem 0 1rem 1rem}.more-attachments span{color:#b8b8b8}.more-attachments .more-attachments-num{color:#72a114;margin-left:.5rem}.more-attachments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.add-attach{cursor:pointer;overflow:hidden;position:relative}.add-attach input{display:none}.category-config .category-item,.category-config .resume{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.add-attach span{color:#b8b8b8}.attachment-preview img{max-height:95vh;max-width:95vw}.category-config:first-child{border-top:1px solid #b8b8b8}.category-config .resume{-webkit-box-align:space-between;-webkit-align-items:space-between;-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:flex;padding:1rem;position:relative}.category-config .resume-title{width:280px}.category-config .count{color:#b8b8b8;float:left;padding-right:5px}.category-config .summary-role{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#b8b8b8;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#72a114}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .icon{font-size:2rem;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-align:right}.category-config .category-items{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden;background-color:#f5f5f5;width:100%}.category-config .category-items.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.colors-table .row,.duty-custom-fields .custom-fields-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #f5f5f5}.colors-table .icon,.colors-table .icon-check-square{font-size:1.2rem}.colors-table .table-header:hover{background:0 0}.colors-table .table-header .row{padding-left:50px}.colors-table form:last-child .row{border:0}.colors-table .row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:hover{background:#f6fceb;cursor:move;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.colors-table .row:last-child{border:0}.colors-table .row.edition .current-color{cursor:pointer}.colors-table .row.edition,.colors-table .row.new-value{padding-left:50px}.colors-table .row.hidden{display:none}.colors-table .row .color-column{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.colors-table .row .status-name{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px;position:relative}.colors-table .row .status-name span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.colors-table .row .status-slug{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:6;-webkit-flex-grow:6;-ms-flex-positive:6;flex-grow:6;padding:0 10px}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:130px;text-align:center}.colors-table .row .status-wip-limit{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#b8b8b8;border-radius:2px;height:40px;width:40px}.activity-single .activity-user img,.duty-custom-fields form input{width:100%}.colors-table .icon{color:#b8b8b8;margin-right:1rem;opacity:0}.colors-table .icon.icon-check-square,.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.colors-table .icon:hover{color:#72a114;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.colors-table .icon-delete:hover{color:red}.colors-table .icon-check-square{color:#72a114}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom{font-size:1.2rem;cursor:pointer;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-fields-header .icon-arrow-bottom.open{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.duty-custom-fields .custom-fields-body{max-height:0;-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;overflow:hidden}.duty-custom-fields .custom-fields-body.open{-webkit-transition:max-height .5s ease-in;transition:max-height .5s ease-in;max-height:1000px}.duty-custom-fields .custom-field-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:1rem}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-single .custom-field-options{opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.duty-custom-fields .custom-field-single .custom-field-options a{color:#b8b8b8}.duty-custom-fields .custom-field-single .custom-field-options a:hover{color:#72a114}.duty-custom-fields .custom-field-data{-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{color:#888;display:block;line-height:.9rem}.duty-custom-fields .custom-field-options{margin:0}.duty-custom-fields .custom-field-value{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields form label{cursor:pointer}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;-webkit-transition:color .3s linear;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#b8b8b8;margin-top:.5rem}.external-reference a{border-left:1px solid #b8b8b8;padding:0 .2rem;-webkit-transition:color .3s linear;transition:color .3s linear}.external-reference a:hover{color:#72a114}.external-reference a:first-child{border:0}.activity-single .comment-restore,.activity-single .date,.activity-single .deleted-comment,.activity-single.deleted-comment,.change-entry .activity-fromto,.more-activity,.more-comments,.show-more-comments{font-size:.9rem}.activity-single .deleted-comment .comment-body p,.activity-single.deleted-comment .comment-body p{font-size:1rem}.history-tabs{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.change-entry .activity-changed{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.history{margin-bottom:1rem}.changes-title{display:block;padding:.5rem}.changes-title:hover .icon{color:#72a114;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transition:all .2s linear;transition:all .2s linear}.changes-title .icon{color:#444;float:right;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transition:all .2s linear;transition:all .2s linear}.change-entry{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:.5rem}.change-entry:last-child{border-bottom:0}.change-entry .activity-changed,.change-entry .activity-fromto{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.history-tabs{border-bottom:3px solid #b8b8b8;margin-bottom:0;padding:.5rem 0}.history-tabs li{font-size:1.2rem;display:inline-block}.history-tabs li:first-child{border-right:1px solid #b8b8b8}.history-tabs a{color:#b8b8b8;padding:0 2rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs a.active{color:#444}.history-tabs a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.history-tabs .icon{margin-right:.5rem}.add-comment:after{clear:both;content:'';display:table}.add-comment.active .button-green{display:block}.add-comment.active textarea{height:6rem;-webkit-transition:height .3s ease-in;transition:height .3s ease-in}.add-comment.active .help-markdown{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.add-comment.active .preview-icon{opacity:1;position:absolute;right:1rem}.add-comment .help-markdown,.add-comment .preview-icon,.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave.ng-leave-active:last-child{opacity:0}.add-comment textarea{background:#fff;height:5rem;margin-bottom:.5rem;min-height:41px}.add-comment .save-comment{color:#fff;float:right}.add-comment .button-green{display:none}.more-comments,.show-more-comments{color:#b8b8b8;display:block;border-bottom:1px solid #b8b8b8}.add-comment .edit,.add-comment .preview-icon{position:absolute;right:1rem}.show-more-comments{border-top:1px solid #b8b8b8;padding:1rem 0 1rem 1rem}.show-more-comments:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.more-comments{padding:1rem}.more-comments .prev-comments-num{color:#72a114;margin-left:.5rem}.comment-list.activeanimation .comment-single.ng-enter:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{-webkit-transition:all .3s ease-in;transition:all .3s ease-in}.comment-list.activeanimation .comment-single.ng-enter.ng-enter-active:last-child,.comment-list.activeanimation .comment-single.ng-leave:last-child{opacity:1}.activity-single{border-bottom:1px solid #b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2rem 0;position:relative}.activity-single:hover .comment-delete,.activity-single:hover .comment-restore{opacity:1;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.activity-single:first-child{margin-top:0}.activity-single:last-child{border-bottom:0}.activity-single .deleted-comment,.activity-single.deleted-comment{color:#b8b8b8;padding:.5rem}.activity-single .deleted-comment a,.activity-single.deleted-comment a{color:#b8b8b8;margin-left:.3rem}.activity-single .deleted-comment a:hover,.activity-single.deleted-comment a:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .deleted-comment img,.activity-single.deleted-comment img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:.5}.activity-single .deleted-comment .comment-body,.activity-single.deleted-comment .comment-body{display:none;margin:.2rem 0 .5rem}.activity-single .activity-username,.activity-single .username{margin-bottom:.5rem;color:#72a114}.activity-single .comment-restore{color:#b8b8b8;position:absolute;right:0;top:.4rem}.activity-single .comment-restore .icon{vertical-align:baseline}.activity-single .comment-restore:hover{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single .activity-user{-webkit-flex-basis:60px;-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.activity-single .activity-content{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:calc(100% - 80px)}.activity-single .changes{background:#f5f5f5}.activity-single .changes .change-entry{display:none}.activity-single .changes .change-entry.active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.activity-single .date{color:#b8b8b8;margin-left:1rem}.activity-single .wysiwyg{margin-bottom:0}.activity-single .comment-delete{color:red;opacity:0;position:absolute;right:0;top:2rem;-webkit-transition:all .2s linear;transition:all .2s linear}.activity-single .comment-delete:hover{color:#ff8282;-webkit-transition:color .2s linear;transition:color .2s linear}.activity-single.activity .change-entry{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.more-activity{border-bottom:1px solid #b8b8b8;color:#b8b8b8;display:block;padding:1rem}.more-activity .prev-activity-num{color:#72a114;margin-left:.5rem}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox-generic-form label{font-size:.75rem}.lightbox-add-member .help-text,.lightbox-delete-account .newsletter input+label,.lightbox-sprint-add-edit .delete-sprint,.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem}.lightbox-select-user .more-watchers{font-size:1rem}.lightbox-add-member .add-member-wrapper .icon-delete,.lightbox-add-member .icon,.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-size:1.2rem}.lightbox h2{font-size:1.6rem}.lightbox .close,.lightbox-add-member .icon-delete{font-size:2rem}.lightbox-ask-choice .subtitle,.lightbox-delete-account .subtitle,.lightbox-delete-project .subtitle,.lightbox-generic-ask .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress,.lightbox-select-user .more-watchers{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.lightbox h2,.lightbox-delete-account .newsletter input+label{font-family:opensans-regular,Arial,Helvetica,sans-serif}.lightbox .close{color:#555;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.lightbox-add-member .add-member-wrapper fieldset,.lightbox-generic-form fieldset{position:relative}.lightbox .close:hover{color:#72a114}.open.lightbox{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.lightbox{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox-generic-loading .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.lightbox-generic-form form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form textarea{margin-bottom:1rem;max-height:9rem;min-height:7rem;resize:vertical}.lightbox-generic-form label{background:#f5f5f5;border:1px solid #b8b8b8;color:#444;cursor:pointer;display:block;padding:7px 30px;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form label:hover span{color:#fff}.lightbox-generic-form label span{color:#444;vertical-align:middle}.lightbox-generic-form .settings{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem}.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox-generic-form .settings fieldset:hover{color:#fff;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-add-member .button,.lightbox-add-member .extra-text{margin-top:1rem}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #72a114}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#72a114;border:1px solid #72a114;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-bulk form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-block textarea,.lightbox-create-issue textarea{min-height:8rem;max-height:12rem;margin-bottom:1rem}.lightbox-search form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-search fieldset{margin-bottom:1rem}.lightbox-add-member .add-member-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.lightbox-add-member .add-member-wrapper:last-child,.lightbox-add-member fieldset{margin-bottom:0}.lightbox-add-member .add-member-wrapper fieldset:first-child{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.lightbox-add-member .add-member-wrapper fieldset:last-child{-webkit-flex-basis:200px;-ms-flex-preferred-size:200px;flex-basis:200px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.lightbox-add-member select{width:80%}.lightbox-add-member .icon{margin-left:.5rem}.lightbox-add-member .icon-delete:hover{color:red}.lightbox-add-member .help-text{padding:.5rem 1rem}.lightbox-add-member .checksley-error-list{right:.5rem}.lightbox-add-member .checksley-error-list li{display:none}.lightbox-add-member .checksley-error-list li:first-child{display:block}.lightbox-sprint-add-edit form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint{color:#444;display:block;margin-top:1rem;text-align:right}.lightbox-sprint-add-edit .delete-sprint a{color:#b8b8b8;margin-left:.5rem;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-sprint-add-edit .delete-sprint a:hover{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.lightbox-generic-ask form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-flex-flow:0;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-account form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row,.related-tasks-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.lightbox-delete-project .options a{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-webkit-flex-basis:500px;-ms-flex-preferred-size:500px;flex-basis:500px;-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;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{max-height:100%;max-width:100%;width:100%}.lightbox-generic-loading .progress-bar-wrapper{background:#e8e8e8;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;-webkit-transition:width .1s linear;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#e8e8e8;bottom:35px;color:#555;padding:.3rem;position:absolute;-webkit-transition:left .1s linear;transition:left .1s linear}.lightbox-create-issue form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:flex}.main-nav a,.main-nav span{display:block}.lightbox-create-issue .fieldset-row fieldset{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block .form{-webkit-flex-basis:420px;-ms-flex-preferred-size:420px;flex-basis:420px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single:hover{background:#f3fbe1;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear;-webkit-transition-delay:.2s;transition-delay:.2s}.lightbox-select-user .more-watchers{padding:.5rem;text-align:center}.lb-create-edit-userstory .ticket-role-points{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;max-width:calc(100% * (1/5) - .2rem)}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(5n+5){margin-right:0}.lb-create-edit-userstory .points-per-role{margin-bottom:1rem}.main-nav a:hover .helper{font-size:.9rem}.main-nav .item{font-size:1.2rem}tg-project-menu{background-position:0 -300px;min-height:calc(100vh - 40px);padding:1rem 0}.main-nav{list-style:none;padding:0;position:relative;text-align:center}.related-tasks-body .row,.related-tasks-body .status{text-align:left;position:relative}.main-nav a{color:#fff;padding:.75rem .8rem;position:relative}.main-nav a:hover{background:rgba(0,0,0,.2);color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.main-nav a:hover .helper{-webkit-animation:slideLeft .2s ease-in-out both;animation:slideLeft .2s ease-in-out both;background:-webkit-linear-gradient(left,#000 0,rgba(0,0,0,.8) 100%);background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;padding:.4rem 1rem;position:absolute;top:calc(50% - 1rem);-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;z-index:99}.main-nav a:hover .helper:after{background:#050505;content:'';height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:12px;z-index:98}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .active{background:rgba(0,0,0,.2);color:#9dce0a}.main-nav .active svg path{fill:#9dce0a;opacity:1}@-webkit-keyframes slideLeft{0%{opacity:0}100%{opacity:1}}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.related-tasks-body .pop-status,.related-tasks-body .pop-status a,.related-tasks-body .row{font-size:.9rem}.related-tasks-body .task-name input,.related-tasks-header .related-tasks-title{font-size:1rem}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine,.related-tasks-body .task-settings a,.related-tasks-header .icon{font-size:1.2rem}.related-tasks-body .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.related-tasks-header .related-tasks-title{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.related-tasks{margin-bottom:2rem;position:relative}.related-tasks-header{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.related-tasks-header .icon{color:#444;cursor:pointer}.related-tasks-header .icon:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.related-tasks-body{width:100%}.related-tasks-body .row{-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;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:.5rem 0 .5rem .5rem;width:100%}.related-tasks-body .row:hover{background:0 0}.related-tasks-body .row:hover .task-settings{opacity:1;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .row:last-child{border:0}.related-tasks-body .row .tasks{overflow:hidden;width:100%}.related-tasks-body .row .status{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100px}.related-tasks-body .row .assigned-to{cursor:pointer;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .status:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover a{text-align:left;width:100%}.related-tasks-body .status .popover .point{text-align:center}.related-tasks-body .status .icon{color:#b8b8b8;margin-left:.2rem;opacity:0}.related-tasks-body .pop-status{background:#050505;color:#fff;display:none;left:40%;list-style-type:none;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px;z-index:99}.related-tasks-body .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.related-tasks-body .blocked .icon,.related-tasks-body .blocked .icon:hover,.related-tasks-body .blocked a,.related-tasks-body .blocked a:hover,.related-tasks-body .blocked:hover .icon,.related-tasks-body .blocked:hover .icon:hover,.related-tasks-body .blocked:hover a,.related-tasks-body .blocked:hover a:hover,.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .task-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative}.related-tasks-body .task-name a{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-name input{margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .task-name.loading span{-webkit-animation:loading .5s linear,spin 1s linear infinite;animation:loading .5s linear,spin 1s linear infinite}.filters-inner .loading .loading-spinner,.ticket-detail-settings .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:#ff8282;color:#fff}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .iocaine,.related-tasks-body .iocaine:hover{background:rgba(157,206,10,.3)}.related-tasks-body .iocaine .icon-iocaine,.related-tasks-body .iocaine:hover .icon-iocaine{display:inline-block;margin-right:.5rem;vertical-align:top}.related-tasks-body .task-settings{margin:0 0 0 2rem;opacity:0;position:absolute;right:0;top:0;width:10%}.related-tasks-body .task-settings a{color:#b8b8b8;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .task-settings a:hover{color:#444;-webkit-transition:all .2s ease-in;transition:all .2s ease-in}.related-tasks-body .assigned-to{position:relative;text-align:left}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto.editable{cursor:pointer}.related-tasks-body .task-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{opacity:0;position:absolute;right:.5rem;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.related-tasks-body .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-webkit-flex-basis:35px;-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-data .ticket-data-container,.ticket-status .priority-data .pop-priority,.ticket-status .priority-data .pop-priority a,.ticket-status .severity-data .pop-severity,.ticket-status .severity-data .pop-severity a,.ticket-status .status-data .pop-status,.ticket-status .status-data .pop-status a,.ticket-status .type-data .pop-type,.ticket-status .type-data .pop-type a,.ticket-track-buttons .track-inner{font-size:.9rem}.ticket-data .ticket-title span:last-child,.ticket-track-buttons .track-button-counter{font-size:1.2rem}.ticket-data .ticket-title,.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .status-data .pop-status,.ticket-status .type-data .pop-type,.ticket-track-buttons .track-inner{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-detail-settings .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-width:1rem;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.ticket-data .ticket-title{font-size:1.6rem;margin:1.5rem 0 2rem}.ticket-data .ticket-title span{margin-right:.25rem}.ticket-data .ticket-data-container{margin-bottom:1rem}.ticket-data .ticket-data-container .icon{margin-left:.25rem}.ticket-data .level{display:inline-block;margin-right:.5rem;vertical-align:top}.filters h1,.filters h1 a{vertical-align:baseline}.ticket-data .level-name{color:#c2c2c2;float:right;text-transform:lowercase}.ticket-data .ticket-estimation .ticket-role-points{max-width:25%}.ticket-data .ticket-estimation .ticket-role-points:first-child{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.ticket-status{margin-bottom:.5rem}.ticket-status:last-child{margin:0}.ticket-status div{background:#e8e8e8;padding:.5rem 1rem .5rem .5rem;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .clickable:hover{background:#dcdcdc;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.ticket-status .type-data{position:relative}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .type-data .pop-type a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .severity-data{position:relative}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .severity-data .pop-severity a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;transform:rotate(45deg);width:0}.ticket-status .priority-data .pop-priority:after,.ticket-status .status-data .pop-status:after{background:#050505;height:15px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);content:''}.ticket-status .priority-data{position:relative}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .priority-data .pop-priority a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{position:absolute;transform:rotate(45deg);width:0}.ticket-status .status-data{position:relative}.ticket-status .status-data .pop-status{background:#050505;color:#fff;display:none;left:30px;list-style-type:none;margin:0;padding:10px;position:absolute;width:150px;z-index:99}.ticket-status .status-data .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .status-data .pop-status a:last-child{border:0}.ticket-status .status-data .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.ticket-status .status-data .pop-status a:hover.point{color:#fff}.ticket-status .status-data .pop-status:after{position:absolute;transform:rotate(45deg);width:0}.ticket-track-buttons .track-inner{background:#e8e8e8;padding:.25rem;text-transform:uppercase;-webkit-transition:background .25s;transition:background .25s}.ticket-track-buttons .track-inner:hover{background:#dcdcdc}.ticket-track-buttons .track-button{width:100%}.ticket-track-buttons .active .track-button-counter{background:rgba(68,68,68,.5)}.ticket-track-buttons .active:hover .track-inner{background:rgba(157,206,10,.2)}.ticket-track-buttons .active.is-hover .track-inner{background:red;color:#f5f5f5;-webkit-transition:background .3s;transition:background .3s}.ticket-track-buttons .active.is-hover path{fill:#ff8282}.single-project .track-container .icon path,.single-project .track-container .list-itemtype-track-likers.active path,.single-project .track-container .list-itemtype-track-watchers.active path{fill:currentcolor}.ticket-track-buttons .track-button-counter{background:rgba(68,68,68,.25);color:#f5f5f5;padding:0 .5rem}.ticket-track-buttons .vote-button{margin-bottom:.3rem}.ticket-track-buttons .watch-button{border-bottom:0}.ticket-track-buttons .ticket-watchers{margin:.5rem 0}.wizard-create-project .create-step1 fieldset:first-child,.wizard-create-project .wizard-action a:first-child{margin-right:.5rem}.ticket-track-buttons .add-watcher{display:block;margin:.5rem}.ticket-track-buttons .add-watcher .icon{background:rgba(68,68,68,.25);color:#f5f5f5;margin-right:.5rem;padding:.25rem}.ticket-track-buttons .add-watcher:hover .icon{background:#9dce0a;color:#f5f5f5;-webkit-transition:background .3s linear;transition:background .3s linear}.ticket-detail-settings{margin-top:2rem}.ticket-detail-settings .button,.ticket-detail-settings label{display:block;margin-bottom:.5rem;text-align:center}.ticket-detail-settings .button.editable,.ticket-detail-settings label.editable{cursor:pointer}.ticket-detail-settings .button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .button-gray,.ticket-detail-settings .button-gray:hover{background:#b8b8b8}.ticket-detail-settings .button-gray.editable:hover{background:#444;cursor:pointer}.ticket-detail-settings .button-gray.active{background:#72a114}.ticket-detail-settings .item-block.editable:hover{background:red;cursor:pointer}.ticket-detail-settings .button-red{display:block;margin-top:2rem}.wizard-create-project{background:url(/images/invitation_bg.jpg) center center no-repeat;bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910;background-size:cover;color:#fff;text-align:center}.wizard-create-project p{font-size:.9rem}.wizard-create-project .close{font-size:2rem;position:absolute;right:2rem;top:1rem;-webkit-transition:color .2s;transition:color .2s}.open.wizard-create-project{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:1;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.close.wizard-create-project{opacity:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.wizard-create-project fieldset{margin-bottom:1rem}.wizard-create-project .button-gray,.wizard-create-project .button-green{display:block;padding:12px;text-align:center}.wizard-create-project form{width:500px}.wizard-create-project .title{text-align:center;width:100%}.wizard-create-project h1,.wizard-create-project p{color:#fff}.wizard-create-project h1{line-height:1.5rem}.wizard-create-project p{opacity:.8}.wizard-create-project input,.wizard-create-project select,.wizard-create-project textarea{background:rgba(255,255,255,.7)}.wizard-create-project input::-webkit-input-placeholder,.wizard-create-project select::-webkit-input-placeholder,.wizard-create-project textarea::-webkit-input-placeholder{color:#444}.wizard-create-project input::-moz-placeholder,.wizard-create-project select::-moz-placeholder,.wizard-create-project textarea::-moz-placeholder{color:#444}.wizard-create-project input:-moz-placeholder,.wizard-create-project select:-moz-placeholder,.wizard-create-project textarea:-moz-placeholder{color:#444}.wizard-create-project input:-ms-input-placeholder,.wizard-create-project select:-ms-input-placeholder,.wizard-create-project textarea:-ms-input-placeholder{color:#444}.wizard-create-project .close{color:#fff}.wizard-create-project .close:hover{color:#ff8282}.wizard-create-project .wizard-step{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out;-webkit-animation-direction:alternate-reverse;animation-direction:alternate-reverse;display:none}.wizard-create-project .wizard-step.active{-webkit-animation:formSlide .4s ease-in-out;animation:formSlide .4s ease-in-out}.wizard-create-project .wizard-step.active.create-step1,.wizard-create-project .wizard-step.active.create-step2,.wizard-create-project .wizard-step.active.create-step3{display:block}.wizard-create-project .wizard-action div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .wizard-action a{color:#fff;display:inline-block;-webkit-flex-basis:40%;-ms-flex-preferred-size:40%;flex-basis:40%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 .template-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.wizard-create-project .create-step1 fieldset{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.wizard-create-project .create-step1 input{display:none}.wizard-create-project .create-step1 input:checked+label{background:rgba(157,206,10,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label{background:rgba(245,245,245,.7);cursor:pointer;display:block;margin-bottom:1rem;padding:1rem;text-align:center;-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label:hover{background:rgba(114,161,20,.7);-webkit-transition:background .3s ease-in;transition:background .3s ease-in}.wizard-create-project .create-step1 input+label .icon{font-size:3rem;color:#fff}.wizard-create-project .create-step1 h2{color:#fff;margin:.5rem 0 0;text-transform:uppercase}.wizard-create-project .create-step1 p{text-align:center}.wizard-create-project .progress-bar{bottom:0;height:.5rem;left:0;position:absolute;width:100%}.wizard-create-project .step1 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:25%}.wizard-create-project .step1 .progress-state span:nth-child(1){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .step2 .bar{-webkit-transition:width .6s ease-in-out;transition:width .6s ease-in-out;width:75%}.wizard-create-project .step2 .progress-state span:nth-child(1),.wizard-create-project .step2 .progress-state span:nth-child(2){color:#fff;-webkit-transition:color .3s ease-in-out;transition:color .3s ease-in-out;-webkit-transition-delay:.6s;transition-delay:.6s}.wizard-create-project .progress-state{position:absolute;width:100%}.wizard-create-project .progress-state span{color:rgba(255,255,255,.5);display:inline-block;margin-left:-100px;position:absolute;text-align:center;top:-2rem;-webkit-transition:all 1s ease-in;transition:all 1s ease-in;width:200px}.wizard-create-project .progress-state span:nth-child(1){left:25%}.wizard-create-project .progress-state span:nth-child(2){left:75%}.wizard-create-project .progress-bar-wrapper{background:rgba(255,255,255,.3);height:.5rem}.wizard-create-project .bar{background:rgba(157,206,10,.9);height:.5rem;left:0;position:absolute;top:0;width:0}.create-project{background:url(/images/bg.png) center center no-repeat;background-size:cover;-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;bottom:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.create-project .tagline{font-size:2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;color:#fff;line-height:2rem;text-transform:uppercase}.introjs-tooltip p,.single-project .description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project fieldset{margin-bottom:1rem}.create-project .create-project-container{-webkit-flex-basis:400px;-ms-flex-preferred-size:400px;flex-basis:400px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0}.create-project h1{color:#fff;text-align:center}.create-project .logo,.create-project .tagline{margin-bottom:1rem;text-align:center}.create-project form{margin-bottom:2rem}.create-project input{background:#fff}.create-project input::-webkit-input-placeholder{color:#b8b8b8}.create-project input::-moz-placeholder{color:#b8b8b8}.create-project input:-moz-placeholder{color:#b8b8b8}.create-project input:-ms-input-placeholder{color:#b8b8b8}.create-project .button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.create-project .button:hover{background:#9dce0a}.create-project a:hover{color:#fff}.filters h2 .icon-arrow-right{font-size:1rem}.filters-inner .loading .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-width:1rem}.filters h1 .icon{margin:0}.filters h2 .icon-arrow-right,.single-project h1{vertical-align:middle}.filters h2{font-size:1.2rem;margin-top:1rem}.filters input{background:#444;color:#fff}.filters input::-webkit-input-placeholder{color:#b8b8b8}.filters input::-moz-placeholder{color:#b8b8b8}.filters input:-moz-placeholder{color:#b8b8b8}.filters input:-ms-input-placeholder{color:#b8b8b8}.filters .icon-search{color:#b8b8b8;position:absolute;right:.7rem;top:.7rem}.filters-inner{opacity:0;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.filters-inner .loading{margin:0;padding:8px;text-align:center;width:100%}.filters-applied{margin-top:.5rem}.filters-step-cat .save-filters{color:#fff;display:block;text-align:center}.filters-step-cat .my-filter-name{background:#444;color:#f5f5f5;width:100%}.filters-step-cat .my-filter-name::-webkit-input-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name::-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-moz-placeholder{color:#b8b8b8}.filters-step-cat .my-filter-name:-ms-input-placeholder{color:#b8b8b8}.filters-cats{margin-top:2rem}.filters-cats li{border-bottom:1px solid #b8b8b8;text-transform:uppercase}.filters-cats .custom-filters .title{color:#72a114}.filters-cats a{color:#444;display:block;padding:.5rem 0 .5rem .5rem;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover{color:#72a114;-webkit-transition:color .2s ease-in;transition:color .2s ease-in}.filters-cats a:hover .icon{opacity:1;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.filters-cats .icon{color:#444;float:right;opacity:0;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-overlay{background:-webkit-radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(245,245,245,.2) 100%);background-color:#f5f5f5}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#72a114;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:600px;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .track-container .list-itemtype-track{font-size:.9rem}.single-project .description,.single-project .title{font-size:1rem}.single-project .single-project-intro{margin-bottom:2rem}.single-project .intro-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.single-project h1{color:#72a114;display:inline-block;line-height:1.2;margin-bottom:0;margin-right:3rem}.single-project .private{font-size:1rem;vertical-align:super}.single-project .like-watch-container{margin-left:auto}.single-project .track-buttons-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.2rem;width:16px}.single-project .project-data,.single-project .title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#72a114}.single-project .track-container .icon svg{max-height:1rem;max-width:1rem}.single-project .project-data{display:flex}.single-project .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-flex-shrink:3;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .involved-data{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-organization,.single-project .involved-team{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-organization li,.single-project .involved-team li{margin-right:.14rem;width:24%}.single-project .involved-organization li:nth-child(4n),.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-organization a,.single-project .involved-team a{display:block}.single-project .involved-organization img,.single-project .involved-team img{border-radius:.2rem;width:100%}.issues-options{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table .pop-status,.issues-table .pop-status a,.issues-table .table-main{font-size:.9rem}.issues-table .title{font-size:1rem}.empty-issues .title{font-size:1.2rem;text-transform:uppercase}.empty-issues p,.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.issues-table .title{font-family:opensans-semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8}.issues-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .avatar,.kanban-table{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.issues-table .title:hover{background:0 0}.issues-table .title div{cursor:pointer}.issues-table .title .votes{color:#555}.issues-table .table-main{border-bottom:1px solid #ebebeb}.issues-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-webkit-flex-basis:60%;-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-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-align:center;width:75px}.issues-table .votes{color:#555;-webkit-flex-basis:75px;-ms-flex-preferred-size:75px;flex-basis:75px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes.inactive{color:#b8b8b8}.issues-table .votes.is-voted{color:#9dce0a}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .created-field,.issues-table .issue-field{-webkit-flex-basis:140px;-ms-flex-preferred-size:140px;flex-basis:140px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field{-webkit-box-flex:0;-webkit-flex:0 0 160px;-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{opacity:0;position:absolute;right:0;top:.5rem;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.issues-table .pop-status{background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99}.issues-table .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;content:'';height:15px;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1200px){.issues-table .created-field,.issues-table .level-field{display:none}}@media (max-width:767px){.issues-table .assigned-field,.issues-table .created-field,.issues-table .level-field{display:none}}.empty-issues{margin-top:4rem;text-align:center}.empty-issues img{margin-bottom:1rem}.empty-issues p,.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table-body .task-column .kanban-column-intro{font-size:.9rem}.kanban-table-body,.kanban-table-header .task-colum-name .icon{font-size:1rem}.kanban-table{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table .vfold.task-colum-name{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold .kanban-task,.kanban-table .vfold.task-colum-name .icon-bulk,.kanban-table .vfold.task-colum-name .icon-closed-eye,.kanban-table .vfold.task-colum-name .icon-open-eye,.kanban-table .vfold.task-colum-name .icon-plus,.kanban-table .vfold.task-colum-name .icon-vfold,.kanban-table .vfold.task-colum-name .icon-vunfold,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.task-column{-webkit-flex-flow:1;-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{margin-bottom:.5rem;min-height:40px;position:relative;width:100%}.kanban-table-header .kanban-table-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.kanban-table-body,.kanban-table-header .task-colum-name{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-header .task-colum-name{font-size:1.2rem;display:flex;-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:0 10px 0 0;max-width:300px;padding:.5rem .5rem .5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .icon{margin-right:.3rem;-webkit-transition:color .2s linear;transition:color .2s linear}.kanban-table-header .task-colum-name .icon.hfold,.kanban-table-header .task-colum-name .icon.hunfold{display:inline-block;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kanban-table-header .icon-closed-eye,.kanban-table-header .icon-open-eye{display:inline-block}.kanban-table-header .icon-closed-eye svg,.kanban-table-header .icon-open-eye svg{fill:#b8b8b8;height:1.1rem;margin-top:.25rem;width:1.1rem}.kanban-table-header .icon-closed-eye:hover svg,.kanban-table-header .icon-open-eye:hover svg{fill:#72a114}.kanban-table-header .icon-open-eye .svg-eye-closed{display:none}.kanban-table-header .icon-closed-eye .svg-eye-closed,.kanban-table-header .icon-open-eye .svg-eye-open{display:block}.kanban-table-header .icon-closed-eye .svg-eye-open{display:none}.kanban-table-body{display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-inner,.search-filter ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.kanban-table-body .task-column{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-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;margin:0 10px 0 0;max-width:300px;overflow-y:auto;widows:300px}.kanban-table-body .task-column:last-child{margin-right:0}.kanban-table-body .task-column .kanban-column-intro{font-family:opensans-semibold,Arial,Helvetica,sans-serif;color:#b8b8b8;margin:1rem 2rem}.kanban-table-body .task-column .kanban-column-intro.active{color:#050505}.kanban-table-body .task-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-inner{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.search-filter a{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;opacity:.2}.search-filter ul{border-bottom:3px solid #b8b8b8;display:flex;padding-bottom:.5rem}.search-filter li{margin-right:1rem}.search-filter .active,.search-filter a:hover{color:#555;opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.search-filter .icon{margin-right:.4rem}.search-filter .name{padding-left:5px}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#b8b8b8}.search-in input::-moz-placeholder{color:#b8b8b8}.search-in input:-moz-placeholder{color:#b8b8b8}.search-in input:-ms-input-placeholder{color:#b8b8b8}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{color:#b8b8b8}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #f5f5f5}.search-result-table .user-story-name .icon{font-size:1rem;color:#b8b8b8}.empty-search-results .title{font-size:1.2rem;text-transform:uppercase}.search-result-table .row{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row:hover{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .row .ref{-webkit-flex-basis:30px;-ms-flex-preferred-size:30px;flex-basis:30px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0 1rem}.search-result-table .row .user-stories{-webkit-flex-basis:300px;-ms-flex-preferred-size:300px;flex-basis:300px;-webkit-box-flex:10;-webkit-flex-grow:10;-ms-flex-positive:10;flex-grow:10;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1}.search-result-table .row .points,.search-result-table .row .status{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;padding:0 1rem}.search-result-table .row-selected{background:#f6fceb;-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon:hover{color:#444;-webkit-transition:color .3s linear;transition:color .3s linear}.search-result-table .points,.search-result-table .status{position:relative}.search-result-table .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.empty-search-results{margin-top:4rem;text-align:center}.empty-search-results img{margin-bottom:1rem}.empty-search-results p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.team-filters nav li{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.table-team .team-header,.team-filters nav li:last-child{border-bottom:0}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters nav a{display:block;padding:1rem 0 1rem 1rem}.team-filters nav a.active,.team-filters nav a:hover{color:#72a114;-webkit-transition:color .3s linear;transition:color .3s linear}.team-filters nav .active,.team-filters nav a.active.icon{opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.team-filters nav .icon{color:#050505;float:right;opacity:0}.table-team .leave-project,.table-team .popover,.table-team .popover a{font-size:.9rem}.table-team .attribute .points{font-size:1.6rem}.table-team .attribute,.table-team .attribute .points,.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.policy-table .policy-table-header,.table-team .avatar .name,.table-team .team-header{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.table-team .row{padding:.5rem}.table-team .username{-webkit-flex-basis:220px;-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:6;-webkit-flex:6;-ms-flex:6;flex:6;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{color:#050505;font-size:1.8rem}.table-team .attribute .points{color:#444}.table-team .attribute .top{color:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{color:#b8b8b8;display:block}.table-team .leave-project .icon{margin-right:.2rem}.table-team .leave-project:hover .icon{color:red;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .hero{width:100%}.table-team .hero .row{background:#f5f5f5;border-bottom:0;margin:1rem 0}.table-team .avatar{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.table-team .avatar img{-webkit-flex-basis:66px;-ms-flex-preferred-size:66px;flex-basis:66px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:66px}.table-team .avatar figcaption{margin-left:1rem;width:65%}.table-team .avatar figcaption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .position{color:#b8b8b8}.table-team .popover{background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99}.table-team .popover a{border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;-webkit-transition:color .3s linear;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:15px}.policy-table .policy-table-row{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{border-bottom:2px solid #b8b8b8}.user-change-password label,.user-profile label{font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-involved,.policy-table .policy-table-none{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#72a114;-webkit-transition:background .3s linear;transition:background .3s linear}.policy-table label{background:#b8b8b8;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;-webkit-transition:background .3s linear;transition:background .3s linear}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile form .avatar-container p{font-size:.75rem}.user-profile .delete-account,.user-profile form .avatar-container .use-gravatar{font-size:.9rem}.user-profile form .avatar-container span{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.user-profile form .avatar-container .loading-spinner{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem}.user-profile form{max-width:700px;width:100%}.user-profile form .container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.user-profile form .avatar-container{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-right:1rem}.user-profile form .avatar-container .image-container{position:relative}.user-profile form .avatar-container .avatar{border-radius:8%;width:100%}.user-profile form .avatar-container .overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile form .avatar-container .loading-spinner{border:0;min-height:3rem;min-width:3rem;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.user-profile form .avatar-container p{line-height:.8rem;margin-bottom:.3rem;text-align:center}.user-profile form .avatar-container .use-gravatar{cursor:pointer;display:inline-block;text-align:center;width:100%}.user-profile form .data{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3}.user-profile fieldset{margin-bottom:1rem}.user-profile .submit{margin-top:2rem}.user-profile label{display:block;margin-bottom:.5rem}.user-profile textarea{min-height:7rem}.user-profile .button-green{color:#fff;cursor:pointer;display:block;padding:12px;text-align:center}.user-profile .delete-account{display:block;margin-top:1rem}.wiki-nav li input{font-size:1rem}.wiki-nav li{font-size:1.2rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;border-bottom:1px solid #b8b8b8;text-transform:uppercase}.wiki-nav li:hover .icon{opacity:1;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li a{display:block;padding:1rem 0 1rem 1rem}.wiki-nav li a span{cursor:pointer}.wiki-nav li .icon{color:#050505;float:right;opacity:0;-webkit-transition:opacity 1s linear;transition:opacity 1s linear}.wiki-nav li input{font-family:opensans-regular,Arial,Helvetica,sans-serif;background:#444;color:#f5f5f5}.wiki-nav li input::-webkit-input-placeholder{color:#b8b8b8}.wiki-nav li input::-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-moz-placeholder{color:#b8b8b8}.wiki-nav li input:-ms-input-placeholder{color:#b8b8b8}.wiki-nav li .loading{margin:0;padding:8px;text-align:center;width:100%}.wiki-nav .add-button{color:#fff;display:block;margin-bottom:.5rem;text-align:center}.wiki-summary .wiki-user-modification,.wiki-summary div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.wiki-summary .username{font-size:1.2rem;color:#9dce0a;white-space:nowrap}.wiki-summary{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary div{display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:1rem}.wiki-summary .number{line-height:2rem;top:0}.wiki-summary .wiki-user-modification{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary figure{margin-right:.3rem;width:32px}.external-app-wrapper .app-card a,.external-app-wrapper .app-card p,.external-app-wrapper .user-card a{font-size:.75rem}.external-app-wrapper .cancel{font-size:.9rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:6rem;margin:0 auto;width:6rem}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.external-app-wrapper .app-card a,.external-app-wrapper .button-green,.external-app-wrapper .user-card a{display:block}.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card .app-image{-webkit-flex-basis:100px;-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-webkit-flex-basis:50px;-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .cancel{display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #f5f5f5;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;-webkit-transition-delay:.2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single.blocked,.working-on .duty-single.blocked{background:rgba(255,130,130,.2);color:red}.watching .duty-single>a,.working-on .duty-single>a{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:0;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}.empty-ticket .data,.home-project-list li a{-webkit-box-orient:vertical;-webkit-box-direction:normal}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper,.home-wrapper .title-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-wrapper{display:flex}.home-wrapper .duty-summary{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .project-list{width:250px}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.6rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:flex;margin:0 0 .5rem;padding:.9rem 1rem}.empty-ticket,.home-project-list li a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.home-project-list p{font-size:.75rem}.projects-empty p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.home-project-list h2,.home-project-list p{font-family:opensans-regular,Arial,Helvetica,sans-serif}.home-project-list li{border:1px solid #dedede;border-radius:3px;cursor:pointer;margin-bottom:.75rem;padding:1rem;text-overflow:ellipsis}.home-project-list li:hover{border-color:#9dce0a;-webkit-transition:all .3s linear;transition:all .3s linear}.home-project-list li:hover p{color:#555;-webkit-transition:color .3s linear;transition:color .3s linear}.home-project-list li:hover .private path{fill:#555;-webkit-transition:fill .3s linear;transition:fill .3s linear}.home-project-list li a{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-height:5rem}.home-project-list h2{color:#555;font-size:1.5rem;line-height:1.3;margin-bottom:.5rem;text-transform:none}.home-project-list h2 .project-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.home-project-list p{color:#b8b8b8;line-height:125%;margin:0}.projects-empty{text-align:center}.projects-empty svg{height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty svg path{fill:#f5f5f5}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:2rem 9rem 1rem;text-align:center}.empty-ticket{display:flex}.empty-ticket .data,.navbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.empty-ticket:not(:last-child){border-bottom:1px solid #f5f5f5;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e8e8e8;-webkit-flex-basis:48px;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:40vw}.empty-ticket .line:last-child{margin:0;width:20vw}.navbar{display:flex;height:40px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar:after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-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;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar .nav-left>a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left>a.logo{background:rgba(0,0,0,.2);padding:.4rem .75rem}.navbar .nav-left>a svg{height:1.6rem;max-width:2rem}.navbar .nav-left>a path{fill:#fff}.navbar .nav-right{margin-left:auto}.navbar .nav-right a{color:#fff;padding:.5rem 2rem}.navbar a{color:#fff;display:inline-block;-webkit-transition:all .2s linear;transition:all .2s linear}.navbar a svg path{fill:#718874}.navbar a:hover{background:rgba(0,0,0,.2);color:#9dce0a}.navbar a:hover svg path{fill:#fff}.navbar a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar a.user-avatar span{padding-right:1rem}.navbar img{height:2.5rem;padding-left:.5rem;vertical-align:middle}.navbar svg{height:1.2rem;max-width:1.2rem}.navbar svg path{fill:#11241f;-webkit-transition:all .2s;transition:all .2s}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{-webkit-animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#050505;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(5,5,5,0);border-bottom-color:#050505}.navbar-dropdown ul:after{border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown a{color:#b8b8b8;display:block;padding:.8rem .5rem}.navbar-dropdown .create-options,.profile-filter{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#9dce0a}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.navbar-dropdown a.import-project-button{padding-left:.75rem;padding-right:.75rem}.navbar-dropdown .create-options{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.profile-favs{border-top:1px solid #f5f5f5}.profile-filter{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile,.profile-filter .searchbox{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.profile-filter .searchbox{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{color:grayer;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:1rem}.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs,.profile-projects,.profile-timeline{border-top:1px solid #f5f5f5}.profile-filter .searchbox input:focus{border-bottom:1px solid #b8b8b8;outline:0;-webkit-transition:border-bottom .3s ease-in;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#b8b8b8;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile .timeline-wrapper .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32;max-height:3rem;max-width:3rem}.profile{display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{background:#fff;margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;-webkit-transition:all .3s cubic-bezier(.09,.43,.35,.95);transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .profile-sidebar{-webkit-flex-basis:150px;-ms-flex-preferred-size:150px;flex-basis:150px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{margin:2rem auto;max-width:160px;text-align:center}.profile .empty-tab p{font-size:.9rem}.profile-bar .profile-stats .stat-name{font-size:.9rem;font-family:OpenSans-CondLight,Arial,Helvetica,sans-serif}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username{font-size:1.2rem}.profile-bar h2{font-size:1.6rem}.profile-bar .profile-stats .stat-number,.profile-bar h1{font-size:2rem}.profile-bar .profile-edition,.profile-bar .profile-quote,.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .profile-organizations h3,.profile-bar .profile-stats .stat-number,.profile-bar h1{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{-webkit-filter:brightness(40%) saturate(150%) hue-rotate(60deg);filter:brightness(40%) saturate(150%) hue-rotate(60deg);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition:all .2s cubic-bezier(.01,.7,1,1);transition:all .2s cubic-bezier(.01,.7,1,1);-webkit-transition-delay:.3s;transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);-webkit-transition:all .3s cubic-bezier(.01,.7,1,1);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#b8b8b8;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-bar h1{line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar h2{color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#b8b8b8;margin-bottom:1rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#b8b8b8}.profile-bar .profile-stats{border-bottom:1px solid #f5f5f5;color:#555;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{display:block;line-height:1}.profile-bar .profile-stats .stat-name{display:block}.profile-bar .profile-organizations{border-bottom:1px solid #f5f5f5;border-top:1px solid #f5f5f5;margin-bottom:1rem;padding:1rem 0}.profile-bar .profile-organizations h3{margin-bottom:.5rem}.profile-bar .profile-organizations .profile-organizations-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.profile-bar .profile-organizations .organization{background:#b8b8b8;border-radius:5px;height:45px;margin-right:.2rem;width:45px}.profile-bar .profile-quote{background:url(/images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contact-single .profile-contact-data h1 span{font-size:.9rem}.profile-contact-single .profile-contact-data .extra-info{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-contact-single .profile-contact-data h1,.profile-contact-single .profile-contact-data h1 span{font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-contacts{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}.profile-contact-filters{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.profile-contact-filters a{border-bottom:2px solid #fff;color:#b8b8b8;display:inline-block;padding:1rem 1.5rem;-webkit-transition:all .2s linear;transition:all .2s linear}.profile-contact-filters a.active,.profile-contact-filters a:hover{border-bottom:2px solid #b8b8b8;color:#72a114}.profile-contact-single{border-bottom:1px solid #f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.8rem 1rem}.profile-contact-single .profile-contact-picture{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-right:1rem;max-width:54px}.profile-contact-single .profile-contact-picture img{border-radius:.2rem;width:100%}.profile-contact-single .profile-contact-data{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-contact-single .profile-contact-data h1{font-size:1.2rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:1.6;margin-bottom:0;text-transform:none}.profile-contact-single .profile-contact-data h1 span{background:#f5f5f5;color:#555;margin-left:1rem;padding:.1rem .3rem}.profile-contact-single .profile-contact-data p{color:#555;margin-bottom:0}.profile-contact-single .profile-contact-data .extra-info{color:#555}.profile-contact-single .profile-contact-data .position{margin-right:.3rem}.profile-contact-single .profile-project-stats{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;margin-left:auto;width:100px}.profile-contact-single .profile-project-stats div{color:#b8b8b8;margin-right:.5rem}.profile-contact-single .profile-project-stats div .icon{margin-right:.2rem;vertical-align:center}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#b8b8b8;display:inline-block;padding:1rem 1.25rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#444;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #f5f5f5;border-right:1px solid #f5f5f5;position:relative;top:1px;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#72a114;-webkit-transition:color .2s linear;transition:color .2s linear}.profile-content-tabs .icon{margin-right:.4rem}.profile-sidebar h4{font-family:opensans-semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.profile-sidebar h4 .icon{color:#b8b8b8;margin-right:.3rem;vertical-align:text-bottom}.profile-sidebar p{font-size:.9rem;color:#b8b8b8}.profile-sidebar a{color:#72a114}.profile-sidebar .trans-button{margin-bottom:1rem}.profile-projects .list-itemtype-project{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;min-height:10rem}.profile-projects .list-itemtype-project .list-itemtype-project-right{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-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:200px}.project-list-wrapper .help-area{font-size:.9rem;color:#b8b8b8;width:200px}.project-list-wrapper .drag{font-size:1.2rem}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.project-list-wrapper .create-options a.create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .create-options a.import-project-button{padding:.53rem .8rem}.project-list-wrapper .create-options a.import-project-button:hover{background:#444}.project-list-wrapper .create-options a.import-project-button .icon-upload{margin:0}.project-list-wrapper .project-list-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .placeholder{background-color:#fdfdfd;height:5rem}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:#fcfef8;cursor:move;-webkit-transition:background .3s;transition:background .3s}.master,body{background:#fff}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .drag{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:#b8b8b8;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.profile-timeline .single-attachment span{font-size:1rem;font-family:opensans-regular,Arial,Helvetica,sans-serif}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child,.profile-timeline .activity-member-view a{font-family:opensans-semibold,Arial,Helvetica,sans-serif}.profile-timeline .spin img{-webkit-animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;-webkit-transform-origin:32 32;-ms-transform-origin:32 32;transform-origin:32 32}.profile-timeline .activity-item{border-bottom:1px solid #f5f5f5;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#72a114}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#b8b8b8;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-webkit-flex-basis:2rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-member-view{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-webkit-flex-basis:3rem;-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.profile-timeline .activity-member-view p{color:#b8b8b8}a,body{color:#444}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.profile-timeline .single-attachment .icon{margin-right:.3rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{max-height:3rem;max-width:3rem}:root .taskboard-table-body .task-row,_:-ms-fullscreen .task-row{min-height:auto}.menu-secondary{background:#f5f5f5}.menu-tertiary{background-color:#879b89}.extrabar{background:#f5f5f5}h1,h2,h3,h4,h5,h6{color:#050505}a:hover{color:#72a114}input[type=number],input[type=text],input[type=password],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#b8b8b8;color:#444}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#9f9f9f}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#9f9f9f}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#9f9f9f}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9f9f9f}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid red}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);color:#fff}blockquote{border-left:5px solid #f5f5f5}blockquote,blockquote p,cite{color:#555}.summary{background:#444;color:#fff}.kanban-table-header .task-colum-name .icon,.taskboard-table-header .task-colum-name .icon{color:#b8b8b8}.navbar{background:rgba(0,0,0,.5)}.navbar:after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#879b89;background-image:url(../images/menu.png)}.kanban-table-body .kanban-uses-box,.kanban-table-header .task-colum-name,.taskboard-table-body .taskboard-tasks-box{background:#f5f5f5}.main-nav svg path{fill:#fff}.taskboard-table-header .task-colum-name{background:#f5f5f5;border-top:3px solid #b8b8b8}.kanban-table-header .task-colum-name{border-top:3px solid #b8b8b8} \ No newline at end of file