/* * @copyright Copyright (c) 2016 Julius Härtl * * @author Julius Härtl * @author Artem Anufrij * @author Marin Treselj * @author Oskar Kurz * @author Ryan Fletcher * * @license GNU AGPL version 3 or any later version * * 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 . * */ // colors $color-warning-light: nc-lighten($color-warning, 15%); $color-lightgrey: nc-darken($color-main-background, 4%); $color-grey: nc-darken($color-main-background, 7%); $color-darkgrey: nc-darken($color-main-background, 32%); // margins/paddings $board-item-margin: 10px 10px 20px 10px; $board-last-item-margin: 10px; $compact-board-item-margin: 5px 10px 10px 10px; $compact-board-last-item-margin: 5px 10px 10px; @import 'comp-appnav'; @import 'icons'; @import 'animations'; @import 'compact-mode'; @import 'autocomplete'; @import 'comments'; /** * General styles */ button, .button, .app-deck .icon { display: flex; &.button-inline { border: 0; background-color: transparent; } &.button-inline:hover { border: 0; background-color: transparent; } } input.input-inline { font-size: inherit !important; font-weight: inherit; background-color: transparent; padding: 0; border: none; width: 100%; border-radius: 0; } #app img { box-sizing: content-box; } #searchbox { display: flex !important; } .editable-inline { cursor: text; } /** * Generic app layout */ #content { height: 100%; min-height: initial; } .app.app-deck { width: 100%; height: 100%; display: flex; } #app-content { display: flex; flex-direction: column; } /** * Navigation sidebar */ #app-navigation { /** menu */ .board-bullet { position: absolute; margin-left: 17px; margin-top: 16px; width: 12px; height: 12px; border: none; border-radius: 50%; cursor: pointer; } .app-navigation-entry-utils-menu-share i { height: 100%; width: 100%; } li { transition: height 250ms ease-in-out, opacity 250ms ease-in-out, z-index 250ms ease-in-out; } .editing { height: 82px; .icon-add { background-position: 14px 14px; } } .app-navigation-entry-edit { .colorselect { div, label { height: 32px; width: auto; } } form { display: flex; } } } #app-settings-content { overflow: initial; .ui-select-match-item { border: 1px solid var(--color-background-darker) !important; .select-label { color: var(--color-main-text); } } p.hint { margin-top: 10px; color: var(--color-text-light); } } /** * Board view */ #board-status { position: absolute; z-index: 999; width: 100%; height: 100%; background-color: var(--color-main-background, $color-main-background); } #board { position: absolute; white-space: nowrap; overflow: auto; z-index: 100; width: 100%; bottom: 0px; top: 44px; &.as-sortable-un-selectable { .card-list { min-height: 96px; } } .card { opacity: 1; &.file-drop { } } &.card-selected { .card { box-shadow: 0px 0px 7px 0px var(--color-background-darker, $color-grey); &.current { box-shadow: 0px 0px 7px 0px var(--color-text-lighter, $color-darkgrey); } } } } // styles to provide a drop zone in empty stacks .as-sortable-un-selectable { .card-list { min-height: 96px; flex-grow: 1; } // empty stack placeholders and last placeholders should fill the space .emptyStack .as-sortable-placeholder, li:last-child.as-sortable-placeholder { height: 100% !important; } } #innerBoard { padding: 10px; > .as-sortable-placeholder { display: flex !important; width: 320px; min-width: 320px; margin-top: 0; margin-left: 0; } > .as-sortable-drag { background-color: var(--color-main-background $color-main-background); } } #controls { width: inherit; z-index: 120; display: flex; align-items: center; position: inherit; padding-left: 44px; .crumb { order: 0; .bullet { opacity: 1; } a:nth-child(2), a:nth-child(3) { padding-left: 0; margin-left: -5px; } a .icon { margin-top: 2px; } .board-bullet { display: inline-block; width: 20px; height: 20px; border: none; border-radius: 50%; } } button { width: 36px; height: 36px; padding: 9px; } #stack-add form { button { height: auto; width: 32px; } } input[type='text'] { padding: 6px; border: 0 none transparent; min-height: initial; background-color: transparent; height: inherit; } .icon-home { // TODO: deprecate this background-position: 8px center; padding: 10px 24px 10px 14px; } } #app-navigation-toggle-custom { width: 44px; height: 44px; cursor: pointer; opacity: 1; display: inline-block !important; position: fixed; } .board-header-controls { margin-left: auto; align-items: center; &.app-popover-menu-utils { display: flex; #popover-controls { display: flex; align-items: center; } .popovermenu { margin-top: 35px; margin-right: 6px; } } } .filter-select { position: absolute; right: auto; top: 42px; left: -21%; li { padding: 3px; overflow: hidden; width: auto; span { display: block; float: left; width: 20px; height: 20px; margin-right: 5px; } } } #stack-add { background-color: var(--color-background-dark, $color-lightgrey); border-radius: 3px; margin: 3px; display: flex; align-content: center; height: 34px; > form { display: flex; align-content: center; } input { &:invalid, &:-moz-submit-invalid, &:-moz-ui-invalid { box-shadow: none; } } } .stack { width: 100%; vertical-align: top; display: flex; flex-direction: column; h3 { padding: 10px 10px 8px; margin: 0; font-size: 12pt; font-weight: normal; overflow: hidden; display: flex; min-height: 40px; &:hover button { display: flex; } input { padding: 0; width: 100%; margin: 0; font-size: 12pt; border: 0; background-color: var(--color-main-background, $color-main-background); min-height: initial; } span { white-space: normal; overflow: hidden; text-overflow: ellipsis; } button { margin-left: auto; display: flex; opacity: 0.3; padding-right: 0; } } form { width: 100%; } .as-sortable-placeholder { margin: $board-item-margin; border: 1px dashed $color-darkgrey; min-height: 96px; transition: margin 250ms linear; &:last-child { margin: $board-last-item-margin; } } &.as-sortable-item { height: 100%; display: flex; } > ul { display: flex; flex-direction: column; } } .card { background-color: var(--color-main-background, $color-main-background); margin: $board-item-margin; white-space: normal; position: relative; box-shadow: 0 0 3px 1px var(--color-background-darker, $color-darkgrey); border-radius: 3px; transition: margin 250ms linear; &:last-child { margin: $board-last-item-margin; } &.archived .card-upper { opacity: 0.5; } .card-upper { overflow: hidden; position: relative; padding: 5px; } .card-assigned-users { display: flex; justify-content: flex-end; flex-grow: 1; .assigned-user { z-index: 4; margin: 6px 0 6px 6px; } } .card-controls { background: var(--color-background-dark, $color-lightgrey); display: flex; position: relative; padding-left: 10px; .card-options { justify-content: flex-end; } &:hover .card-options { opacity: 1; } .icon-description { margin: 10px; margin-left: 0px; opacity: 0.5; } .due { border-radius: 3px; margin: 6px 4px 6px 0px; padding: 0 4px; font-size: 90%; opacity: 0.5; display: flex; align-items: center; .icon { background-size: contain; } &.overdue { background-color: $color-error; color: var(--color-primary-text, $color-primary-text); .icon-badge { background-image: url('../img/calendar-white.svg'); } } &.now { background-color: $color-warning; } &.next { background-color: $color-warning-light; } span { margin-left: 3px; } } .card-tasks, .card-files, .card-comments { border-radius: 3px; margin: 4px 4px 4px 0px; padding: 0 2px; font-size: 90%; opacity: 0.5; display: flex; align-items: center; .icon { background-size: contain; margin-right: 2px; } } button { padding: 22px; margin: 0; } } a { display: block; } h4 { font-weight: normal; font-size: 10pt; padding: 0; margin: 0 5px; overflow: hidden; text-overflow: ellipsis; span { padding: 6px 0; padding-top: 7px; display: block; } input { width: 100%; margin: 0; } } .labels { position: relative; margin-left: 5px; li { padding: 0 4px; margin: 0 2px 2px 0; border-radius: 3px; font-size: 75%; border: none transparent; float: left; span { display: inline-block; font-weight: bold; background-color: inherit; line-height: normal; } } } &.create { text-align: center; margin: 20px 10px 10px; border: 1px solid; border-radius: 3px; background-color: transparent; overflow: hidden; box-shadow: none; cursor: pointer; &.emptyStack { margin-top: 10px; } &:hover { text-align: center; opacity: 1; } .icon-add { padding: 20px; } h4 { width: 100%; padding: 0; margin: 0; input { width: 100%; border: 0; font-size: 10pt; margin: 0; padding: 10px; } } } } /* ng-sortable: Fix mobile touch scrolling */ .as-sortable-item, .as-sortable-item-handle { -ms-touch-action: auto !important; touch-action: auto !important; -webkit-touch-callout: inherit !important; } /* disable scrolling only when a card is dragged */ .as-sortable-un-selectable .as-sortable-item, .as-sortable-un-selectable .as-sortable-item-handle { -ms-touch-action: none !important; touch-action: none !important; -webkit-touch-callout: inherit !important; } .app-popover-menu-utils { margin-left: auto; min-height: 16px; } .popovermenu:not(.action-item__menu) { z-index: 999; opacity: 1; display: block; &.hidden { display: none; } ul { display: flex !important; flex-direction: column; } } .info { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0.5; i { margin-left: 2px; } span { margin-right: 2px; } } /** * App sidebar */ #sidebar-header { position: sticky; top: 0; background-color: var(--color-main-background, $color-main-background); z-index: 200; h3 { font-size: 14pt; padding: 15px 15px 3px; margin: 0; overflow: hidden; input { min-height: 0px; margin: 0px; } } #card-dates { font-size: 80%; opacity: 0.5; padding-left: 15px; } .icon-close { position: absolute; top: 0px; right: 0px; padding: 14px; height: 44px; width: 44px; } } .drop-indicator { display: none; } .card .nv-file-over, .drop-indicator.nv-file-over { display: block; position: absolute; width: 100%; height: 100%; background-color: var(--color-main-background, $color-main-background); z-index: 100; opacity: 0.9; text-align: center; p { width: calc(100% - 20px); height: calc(100% - 20px); position: absolute; padding: 20px; border: 1px dashed #AAA; margin: 10px; border-radius: 5px; } } #card-meta { // TODO: use .card-block instead? height: 100%; display: flex; flex-direction: column; padding: 0 15px; .duedate { display: flex; align-content: center; min-height: 38px; .timepicker-input { width: 50px; border-left: 0; border-radius: 0px 3px 3px 0px; } .datepicker-input { width: 85px; margin: 3px 0px; border-radius: 3px 0px 0px 3px; } .icon { opacity: 0.5; &:hover { opacity: 1; } } } .section-header { border-bottom: 1px solid $color-lightgrey; display: flex; flex-shrink: 0; margin-bottom: 5px; margin-top: 10px; h4 { padding-top: 5px; padding-bottom: 5px; flex: 1; } } .section-header-tabbed { margin-top: 10px; margin-bottom: 5px; flex-shrink: 0; display: flex; .tabHeaders { margin: 0; flex-grow: 1; } } .tabDetails { display: flex; height: 40px; align-items: center; justify-content: center; input[type=button] { width: 32px; } } .save-indicator { border-radius: 3px; margin: 5px; padding: 0 10px; font-size: 8pt; display: none; text-align: center; &.saved { background-color: $color-success; color: $color-primary-text; } &.unsaved { background-color: var(--color-background-dark, $color-lightgrey); color: var(--color-text-light, $color-darkgrey); } } .icon-help { opacity: 0.5; padding: 5px 15px; display: inline; } .card-details-assign-users { .select2 .ui-select-choices-row-inner { display: flex; padding: 5px !important; } .card-details-assign-users-list { display: flex; .assigned-user { position: relative; .avatardiv-container { margin-right: 5px; } } .tooltip { z-index: 998; position: fixed; } } } .icon-upload.icon-loading-small { background-image: none; } .attachment-list-wrapper { position: fixed; width: 100%; height: 100%; background-color: rgba($color-darkgrey, 0.5); left: 0; top: 0; z-index: 300; } .attachment-list { &.selector { padding: 10px; position: absolute; width: 30%; max-width: 500px; min-width: 200px; max-height: 50%; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: var(--color-main-background, $color-main-background); z-index: 2; border-radius: 3px; box-shadow: 0 0 3px var(--color-background-dark, $color-darkgrey); overflow: scroll; } h3.attachment-selector { margin: 0 0 10px; padding: 0; .icon-close { display: inline-block; float: right; } } li.attachment { display: flex; padding: 3px; &.deleted { opacity: .5; } .fileicon { display: inline-block; min-width: 32px; width: 32px; height: 32px; background-size: contain; } .details { flex-grow: 1; flex-shrink: 1; min-width: 0; flex-basis: 50%; line-height: 110%; padding: 2px; } .filename { width: 70%; display: flex; .basename { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-bottom: 2px; } .extension { opacity: 0.7; } } .filesize, .filedate { font-size: 90%; color: $color-darkgrey; } .app-popover-menu-utils { position: relative; right: -10px; button { height: 32px; width: 42px; } } button.icon-history { width: 44px; } progress { margin-top: 3px; } } } .card-description { &.section-header { .save-indicator { margin-bottom: 5px; margin-top: 5px; } } &.section-content { height: 100%; display: flex; flex-direction: column; > div { height: 100%; } textarea { width: 100%; height: 200px; border: none; margin: 0; padding: 0; } .container { background-color: var(--color-main-background, $color-main-background); } } } } .activity-icon { opacity: 1 !important; .avatardiv-container { top: -4px; left: -7px; margin-right: 5px; img { max-width: 24px; max-height: 24px; opacity: 1; } } & > img { opacity: 0.7; } } .activitysubject.commentAuthor { margin-left: 26px; margin-right: 0; margin-top: 10px; } .activityTabView { .activity { margin-bottom: 20px; } .activitytime { margin: 0 !important; } } .activitysubject .app-popover-menu-utils { display: inline-block; position: relative; a { font-weight: normal; } button { opacity: .5; padding: 7px; margin-left: 10px; } } #commentsTabView { .newCommentRow .avatardiv-container { left: -7px; } .comment { position: relative; padding: 0 0 15px; .avatardiv { width: 24px; height: 24px; line-height: 24px; } } .newCommentForm { margin-left: 26px; } } .card-attachments { .error { padding-left: 38px; margin-bottom: 5px; background-position: 10px; } } .labels { display: block; overflow: hidden; li { padding: 0px 0px 5px 0px; border-radius: 3px; margin: 1px; color: $color-primary-text; min-width: 20px; display: flex; } } /** * Color selection */ .colorselect { overflow: hidden; border-radius:3px; flex-direction: row; display: flex; .color { opacity: 0.7; height: 100%; flex-grow: 1; border: none; } label.color { flex-grow: 1; } .selected { background-image: url('../../../core/img/actions/checkmark.svg'); background-position: center center; background-repeat: no-repeat; opacity: 1; &.selected { background-image: url('../../../core/img/actions/checkmark-white.svg'); } } .colorselect-label, .colorselect-label-white { background-image: url('../img/color_picker-dark.svg'); background-position: center center; background-repeat: no-repeat; opacity: 1; input { position: absolute; visibility: hidden; height: 32px; width: 40px; } } .colorselect-label-white { background-image: url('../img/color_picker.svg'); } } .labels { .colorselect { padding: 0; clear: none; overflow: visible; .color { width: 26px; height: 26px; } } .label-edit { display: flex; width: 100%; .colorselect { margin: 0px 0px 0px 3px; } input { border-bottom: 1px solid $color-lightgrey; padding: 5px 5px 4px 5px !important; } } } /** * Board list main screen area */ #boardlist { position: absolute; overflow: auto; width: 100%; bottom: 0px; top: 44px; thead td { opacity: .5; padding: 15px; } td { padding: 0 10px; border-bottom: 1px solid $color-grey; .board-bullet { width: 32px; height: 32px; border-radius: 50%; cursor: pointer; margin: 6px; } form { display: flex; width: 100%; } .colorselect { flex-grow: 1; div, label { min-width: 32px; } } input[type=text] { flex-grow: 2; } input[type=submit] { width: 32px; } .app-popover-menu-utils { position: relative; button { opacity: 0.5; padding: 22px; } &:hover button { opacity: 1; } } } .icon { padding: 25px; margin: 0 0 0 auto; } tr.deleted td *, tbody .board-create td { opacity: 0.5; } .board-edit-controls { display: flex; } input { margin: 0px; } #assigned-users { display: flex; .avatardiv-container { margin: 6px; } } } /** * Board details */ #tabBoardShare .select2 .ui-select-choices-row-inner { display: flex; padding: 5px !important; } #shareWithList { list-style-type: none; padding: 0 0 16px; li { padding-top: 5px; padding-bottom: 5px; font-weight: bold; white-space: normal; display: flex; align-items: center; } .username { padding-right: 8px; padding-left: 8px; white-space: nowrap; text-overflow: ellipsis; display: inline-block; overflow: hidden; vertical-align: middle; flex-grow: 1; } .icon-delete { display: inline-block; background-size: 16px 16px; width: 16px; height: 16px; padding: 0; margin-top: 10px; } .sharingOptionsGroup { margin-right:10px; } .shareOption { margin-top: 5px; } } .avatardiv { background-color: $color-lightgrey; border-radius: 16px; width: 32px; height: 32px; .icon-group, .icon { padding: 16px; opacity: 0.5; } &.has-contactsmenu img { cursor: pointer; } } .avatardiv-container { position: relative; } .board-detail__deleted-list__item { display: flex; flex-direction: row; * { flex-basis: 44px; } .title { flex-grow: 2; } .live-relative-timestamp { flex-grow: 1; } } #board-detail-labels { ul li { input { margin: 0px; padding: 5px; min-height: 0px; } .label-title { width: 100%; padding: 4px; border: none; border-radius: 0px 0px 5px 5px; } a.icon { padding: 5px; opacity: 0.5; &:hover { opacity: 1; } } } .color { width: 28px; height: 100%; } } .label-create { width: 100%; padding: 0px 56px 0px 0px !important; a { margin: 0px; } .icon { margin-right: 10px; } } .tabHeaders { clear: both; overflow: initial; margin-bottom: 0; .icon { display: inline-block; background-size: contain; margin-right: 5px; opacity: 0.5; } } .tabsContainer { margin-top: 15px; height: 100%; .tab { height: 100%; } } .ui-select-offscreen { display: none; } .ui-select-match-item { padding: 0; float: left !important; display: block; border-radius: 3px !important; .select-label { color: $color-primary-text; padding: 6px 23px 6px 6px; margin-right: -23px !important; } .select2-search-choice-close { z-index: 100; position: relative; display: inline-flex !important; margin-right: 7px; vertical-align: top; } } .select2-container { width: 100%; margin: 0; .select2-choices { padding: 0 !important; .select2-search-choice { padding: 3px 0 !important; border: 0 !important; overflow: hidden; } .select2-search-field { margin-right: -10px; flex-grow: 1; input { width: 100% !important; } } } .select2-choice { height: auto; } } .ui-select-container[disabled] .ui-select-match-item { margin-right: 0 !important; .select-label { padding: 4px; min-width: 26px !important; height: 100%; display: inline-block; } } .select2-search input { width: 100% !important; } .select2-result-label { padding: 0px !important; display: flex; span { flex-grow: 1; padding: 6px; } } /** * Markdown rendering */ #markdown { width: 100% !important; min-height: 40px; cursor: text; p { margin-bottom: 15px; } * { white-space: normal; word-wrap: break-word; overflow-wrap: break-word; } a { opacity: 0.5; text-decoration: underline; } ol, ul { margin-left: 20px; margin-bottom: 10px; } ul { list-style-type: disc; } h1 { font-size: 18px; font-weight: 600; margin-bottom: 5px; } h2 { font-size: 16px; font-weight: 600; } h3 { font-size: 14px; font-weight: 600; } h4 { font-size: 13px; font-weight: 600; } h6 { font-size: 12px; font-weight: 600; } pre { background-color: var(--color-background-dark, $color-lightgrey); padding: 3px; overflow: auto; code { white-space: pre; } } img { max-width: 100%; max-height: 50vh; margin: auto; display: block; } input[type=checkbox] { margin: 0px 10px 0px 0px; line-height: 10px; font-size: 10px; display: inline-block; min-height: 12px; } li input[type="checkbox"].checkbox + label::before { margin-left: -15px; } input[type="checkbox"].checkbox + label::before { position: relative; z-index: 100; margin-right: 10px; margin-top: 0; } li input[type="checkbox"].checkbox:not(:checked) + label::before { background-color: $color-main-background; } table { margin-bottom: 10px; border-collapse: collapse; thead { background-color: var(--color-background-dark, $color-lightgrey); } td, th { border: 1px solid var(--color-background-darker, $color-darkgrey); padding: 3px; } } } .section-wrapper { display: flex; max-width: 100%; margin-top: 10px; } .section-label { background-position: 0px center; width:28px; flex-shrink: 0; } .section-details { flex-grow: 1; } /** * Mobile optimizations */ @media (min-width: 481px) { /* hide board actions on mobile */ .board-header-controls { display: flex; &.app-popover-menu-utils { display: none; } } #innerBoard { display: flex; } .stack { width: 320px; min-width: 320px; border-right: 1px solid $color-lightgrey; margin-right: 10px; padding-right: 10px; &:last-child { border-right: 1px solid transparent; } h3 button { display: none; } h2:hover button { display: inline-flex; } } } /** * Hotfix for https://github.com/angular-ui/ui-select/issues/1652 */ .ui-select-dropdown.select2-drop-active { opacity: 1 !important; } /** * Custom app sidebar handling */ body:not(.snapjs-left) { .app-navigation-hide { #app-content { margin-left: 0 !important; /* overwrite margin since we want the translateX to handle it*/ } #app-navigation { transform: translateX(-300px); } } } @media only screen and (max-width: 768px) { #app-navigation-toggle-custom { display: none; } } /** * Print settings, better leave them at the eof */ @import 'print.scss';