├── .gitignore ├── README.md ├── bootstrap ├── bootstrap.bundle.min.js └── bootstrap.min.css ├── fonts ├── fa-regular-400.woff ├── fa-regular-400.woff2 ├── fa-solid-900.woff ├── fa-solid-900.woff2 ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff2 ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff2 ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff2 ├── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff └── roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff2 ├── images ├── contactgroup.png ├── contactpic.png ├── corner-handle.svg ├── favicon.ico └── watermark.jpg ├── meta.json ├── styles ├── colors.less ├── embed.less ├── fontawesome.less ├── layout.less ├── less.min.js ├── mixins.less ├── print.less ├── styles.less ├── variables.less └── widgets │ ├── buttons.less │ ├── common.less │ ├── dialogs.less │ ├── forms.less │ ├── jqueryui.less │ ├── lists.less │ ├── mail.less │ ├── messages.less │ ├── searchbar.less │ ├── taskmenu.less │ └── toolbar.less ├── templates ├── about.html ├── addressbook.html ├── bounce.html ├── compose.html ├── contact.html ├── contactedit.html ├── contactimport.html ├── contactprint.html ├── contactsearch.html ├── dialog.html ├── error.html ├── folderedit.html ├── folders.html ├── identities.html ├── identityedit.html ├── includes │ ├── footer.html │ ├── layout.html │ ├── mail-menu.html │ ├── menu.html │ ├── pagenav.html │ └── settings-menu.html ├── login.html ├── mail.html ├── message.html ├── messageerror.html ├── messagepart.html ├── messageprint.html ├── plugin.html ├── responseedit.html ├── responses.html ├── settings.html └── settingsedit.html ├── thumbnail.png ├── ui.js └── watermark.html /.gitignore: -------------------------------------------------------------------------------- 1 | styles/styles.css 2 | styles/print.css 3 | styles/embed.css 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This code is now part of https://github.com/roundcube/roundcubemail -------------------------------------------------------------------------------- /fonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/fa-regular-400.woff -------------------------------------------------------------------------------- /fonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /fonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/fa-solid-900.woff -------------------------------------------------------------------------------- /fonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff2 -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff2 -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff2 -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff -------------------------------------------------------------------------------- /fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff2 -------------------------------------------------------------------------------- /images/contactgroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/images/contactgroup.png -------------------------------------------------------------------------------- /images/contactpic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/images/contactpic.png -------------------------------------------------------------------------------- /images/corner-handle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/images/favicon.ico -------------------------------------------------------------------------------- /images/watermark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/images/watermark.jpg -------------------------------------------------------------------------------- /meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Elastic", 3 | "author": "Aleksander Machniak", 4 | "license": "Creative Commons Attribution-ShareAlike", 5 | "license-url": "http://creativecommons.org/licenses/by-sa/3.0/", 6 | "config": { 7 | "layout": "widescreen", 8 | "jquery_ui_colors_theme": "bootstrap", 9 | "embed_css_location": "/styles/embed.css" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /styles/colors.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | @color-main: #37beff; 13 | @color-main-dark: darken(@color-main, 35%); 14 | @color-black: #161b1d; 15 | @color-font: @color-black; 16 | @color-link: #00acff; 17 | @color-link-hover: darken(@color-link, 10%); 18 | @color-border: #ddd; 19 | @color-error: #ff5552; 20 | @color-success: #41b849; 21 | @color-warning: #ffd452; 22 | 23 | @color-link-secondary: lighten(@color-font, 60%); 24 | @color-black-shade-text: lighten(@color-black, 35%); 25 | @color-black-shade-border: lighten(@color-black, 75%); 26 | @color-black-shade-bg: lighten(@color-black, 85%); 27 | 28 | 29 | // Layout elements 30 | @color-layout-border: @color-black-shade-border; 31 | @color-layout-sidebar-background: #fff; 32 | @color-layout-list-background: #fff; 33 | @color-layout-content-background: #fff; 34 | @color-layout-header-background: #fff; 35 | 36 | 37 | // Task menu 38 | @color-taskmenu-background: #414e54; 39 | @color-taskmenu-button: #fff; 40 | @color-taskmenu-button-selected: @color-taskmenu-button; 41 | @color-taskmenu-button-action: @color-taskmenu-button; 42 | @color-taskmenu-button-special: @color-taskmenu-button; 43 | 44 | @color-taskmenu-button-selected-background: lighten(@color-taskmenu-background, 10%); 45 | @color-taskmenu-button-action-background: @color-main; 46 | @color-taskmenu-button-special-background: @color-taskmenu-background; 47 | 48 | @color-taskmenu-button-selected-hover: #fff; 49 | @color-taskmenu-button-action-hover: #fff; 50 | @color-taskmenu-button-special-hover: lighten(@color-taskmenu-button-special, 10%); 51 | 52 | @color-taskmenu-button-background-hover: lighten(@color-taskmenu-background, 10%); 53 | @color-taskmenu-button-action-background-hover: lighten(@color-taskmenu-button-action-background, 10%); 54 | @color-taskmenu-button-special-background-hover:lighten(@color-taskmenu-button-special-background, 10%); 55 | @color-taskmenu-button-logout-hover: @color-error; 56 | 57 | 58 | // Toolbar 59 | @color-toolbar-button: @color-font; 60 | @color-toolbar-button-background-hover: tint(@color-main, 96%); 61 | 62 | @color-searchbar-icon-active: green; 63 | 64 | 65 | // Toolbar menu 66 | @color-toolbarmenu-hover: #fff; 67 | @color-toolbarmenu-hover-background: @color-main; 68 | 69 | 70 | // Listings 71 | @color-list: @color-font; 72 | @color-list-selected: inherit; 73 | @color-list-selected-background: tint(@color-main, 94%); 74 | @color-list-flagged: @color-error; 75 | @color-list-deleted: @color-black-shade-border; 76 | @color-list-secondary: @color-black-shade-text; 77 | @color-list-droptarget-background: #ffffcc; 78 | @color-list-focus-indicator: lighten(@color-main, 20%); 79 | 80 | @color-list-border: @color-black-shade-bg; 81 | @color-list-badge: #fff; 82 | @color-list-badge-background: @color-main; 83 | @color-list-recent: blue; 84 | @color-list-recent-badge: #fff; 85 | @color-list-recent-badge-background: @color-list-recent; 86 | 87 | @color-list-pagenav: @color-black-shade-text; 88 | @color-list-icon: fadeout(@color-list-secondary, 25%); 89 | 90 | 91 | 92 | // Drag-n-drop layer 93 | @color-drag-layer: #fff; 94 | @color-drag-layer-background: @color-taskmenu-background; 95 | @color-drag-layer-shadow: @color-black-shade-bg; 96 | 97 | 98 | // Messages 99 | @color-message: @color-font; 100 | @color-message-border: rgba(0, 0, 0, 0.15); 101 | @color-message-background: fadeout(@color-main, 95%); 102 | @color-message-link: @color-main; 103 | @color-message-information: @color-main; 104 | @color-message-success: @color-success; 105 | @color-message-warning: @color-warning; 106 | @color-message-error: @color-error; 107 | @color-message-loading: #333; 108 | @color-message-shadow: @color-black-shade-bg; 109 | @color-message-error-background: fadeout(@color-message-error, 95%); 110 | @color-message-information-background: fadeout(@color-message-information, 95%); 111 | @color-message-success-background: fadeout(@color-message-success, 95%); 112 | @color-message-warning-background: fadeout(#ffff66, 75%); 113 | 114 | 115 | // Popovers (menus) 116 | @color-popover-header: @color-black-shade-text; 117 | @color-popover-header-background: transparent; 118 | @color-popover-shadow: @color-black-shade-bg; 119 | @color-popover-separator: @color-black-shade-text; 120 | @color-popover-separator-background: @color-black-shade-bg; 121 | @color-popover-mobile-header: #fff; 122 | @color-popover-mobile-header-background: @color-main-dark; 123 | 124 | 125 | // Dialogs 126 | @color-dialog-overlay-background: fade(@color-font, 50%); 127 | @color-dialog-header: @color-font; 128 | @color-dialog-header-border: @color-border; 129 | 130 | 131 | @color-spinner-circle: @color-black-shade-bg; 132 | @color-spinner-item: @color-black-shade-text; 133 | 134 | 135 | // Forms 136 | @color-input: @color-font; 137 | @color-input-border: rgba(22, 27, 29, 0.15); 138 | @color-input-border-focus: @color-main; 139 | @color-input-border-focus-shadow: fadeout(@color-main, 75); 140 | @color-input-border-invalid: @color-error; 141 | @color-input-border-invalid-shadow: fadeout(@color-error, 75); 142 | @color-input-addon-background: @color-black-shade-bg; 143 | @color-recipient-input-border: @color-input-border; 144 | @color-recipient-input-background: @color-black-shade-bg; 145 | 146 | @color-checkbox: @color-main; 147 | @color-checkbox-checked: @color-main; 148 | @color-checkbox-focus: darken(@color-checkbox, 30%); 149 | @color-checkbox-checked-focus: darken(@color-checkbox-checked, 30%); 150 | 151 | @color-form-hint: @color-black-shade-text; 152 | 153 | @color-image-upload-background: @color-black-shade-bg; 154 | 155 | @color-btn-secondary: #fff; 156 | @color-btn-secondary-background: lighten(@color-black, 50%); 157 | @color-btn-primary: #fff; 158 | @color-btn-primary-background: @color-main; 159 | @color-btn-danger: #fff; 160 | @color-btn-danger-background: @color-error; 161 | 162 | @color-quota-background: @color-black-shade-border; 163 | @color-quota-text: @color-black-shade-text; 164 | @color-quota-value: @color-main; 165 | @color-quota-value-warning: @color-error; 166 | 167 | @color-blockquote-background: fadeout(@color-black-shade-bg, 50%); 168 | @color-blockquote-0: darken(@color-main, 30%); 169 | @color-blockquote-1: darken(@color-success, 25%); 170 | @color-blockquote-2: darken(@color-error, 20%); 171 | @color-blockquote-0-border: @color-blockquote-0; 172 | @color-blockquote-1-border: @color-blockquote-1; 173 | @color-blockquote-2-border: @color-blockquote-2; 174 | 175 | @color-mail-signature: @color-black-shade-text; 176 | @color-mail-headers: @color-black-shade-text; 177 | 178 | @color-spellcheck-link: @color-error; 179 | 180 | @color-table-border: @color-layout-border; 181 | @color-table-selected: @color-list-selected; 182 | @color-table-selected-background: @color-list-selected-background; 183 | 184 | 185 | // Datepicker 186 | @color-datepicker-border: @color-layout-border; 187 | @color-datepicker-font: @color-font; 188 | @color-datepicker-highlight: !default; 189 | @color-datepicker-highlight-background: lighten(@color-main, 30%); 190 | @color-datepicker-active: #fff; 191 | @color-datepicker-active-background: @color-main; 192 | 193 | 194 | // Image tools 195 | @color-image-tools: #fff; 196 | @color-image-tools-background: fadeout(@color-main, 60%); 197 | @color-image-tools-hover: fadeout(@color-main, 50%); 198 | 199 | -------------------------------------------------------------------------------- /styles/embed.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /* Style for embedded inline warning */ 13 | 14 | @import (reference) "variables"; 15 | @import (reference) "mixins"; 16 | 17 | @font-face { 18 | font-family: 'Icons'; 19 | font-style: normal; 20 | font-weight: 900; 21 | src: url("../fonts/fa-solid-900.woff2") format('woff2'), 22 | url("../fonts/fa-solid-900.woff") format('woff'); 23 | } 24 | 25 | @font-face { 26 | font-family: 'Icons'; 27 | font-style: normal; 28 | font-weight: 400; 29 | src: url("../fonts/fa-regular-400.woff2") format('woff2'), 30 | url("../fonts/fa-regular-400.woff") format('woff'); 31 | } 32 | 33 | @font-face { 34 | font-family: 'Roboto'; 35 | font-style: normal; 36 | font-weight: 400; 37 | src: local('Roboto'), local('Roboto-Regular'), 38 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+ 39 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ 40 | } 41 | 42 | .rcmail-inline-message { 43 | .font-family; 44 | font-size: @page-font-size; 45 | padding: .5em; 46 | margin: 0 0 .5em 0; 47 | opacity: .95; 48 | color: @color-message; 49 | background-color: @color-message-background; 50 | display: flex; 51 | align-items: center; 52 | 53 | &:before { 54 | .font-icon-class; 55 | font-size: 1.5em; 56 | line-height: 1; 57 | width: 1em; 58 | margin-right: .3em; 59 | content: @fa-var-exclamation-triangle; 60 | color: @color-message-warning; 61 | } 62 | 63 | span { 64 | line-height: 1.5; 65 | } 66 | 67 | a { 68 | color: @color-link; 69 | } 70 | 71 | a:hover { 72 | color: @color-link-hover; 73 | } 74 | 75 | button { 76 | vertical-align: middle; 77 | white-space: nowrap; 78 | padding: .375em .75em; 79 | margin-left: .5em; 80 | font-size: 1em; 81 | line-height: 1.5; 82 | border-radius: .25em; 83 | border: 1px solid transparent; 84 | color: @color-btn-primary; 85 | background: @color-btn-primary-background; 86 | 87 | &:focus { 88 | box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 50%); 89 | } 90 | 91 | &:hover { 92 | background: darken(@color-btn-primary-background, 8%); 93 | border-color: darken(@color-btn-primary-background, 10%); 94 | } 95 | 96 | &:not([disabled]):not(.disabled):active { 97 | background: darken(@color-btn-primary-background, 11%); 98 | border-color: darken(@color-btn-primary-background, 13%); 99 | box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 53%); 100 | } 101 | } 102 | } 103 | 104 | .rcmail-inline-buttons { 105 | margin: 0; 106 | } 107 | -------------------------------------------------------------------------------- /styles/layout.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Responsive design - Layout ***/ 13 | 14 | /* 15 | - Large screen (width > 1200px) 16 | ----------------------------------------------------------------------------------------------------- 17 | | menu | sidebar | list | content | 18 | ----------------------------------------------------------------------------------------------------- 19 | - Normal screen (1200px => width => 768px) - typical: 768x1024 (iPad Mini/Air) 20 | ------------------------------------------------------------------- 21 | |menu| sidebar/list | content | 22 | ------------------------------------------------------------------- 23 | - Small (480px < width < 768px) 24 | ------------------------------------------ 25 | |menu| sidebar/list/content | 26 | ------------------------------------------ 27 | - Phone (width <= 480px) - typical: 320x480 (iPhone 5), 375x667 (iPhone 6-7), 360x564 (Galaxy S6) 28 | ------------------------ 29 | | sidebar/list/content | 30 | ------------------------ 31 | */ 32 | 33 | html { 34 | height: 100%; 35 | font-size: @page-font-size; 36 | } 37 | 38 | body { 39 | min-width: @page-min-width; 40 | height: 100%; 41 | color: @color-font; 42 | overflow: hidden; 43 | } 44 | 45 | body > #layout { 46 | overflow: hidden; 47 | display: flex; 48 | height: 100%; 49 | width: 100%; 50 | 51 | & > div { 52 | &.sidebar, 53 | &.list { 54 | display: flex; 55 | flex-direction: column; 56 | max-width: 30%; 57 | border-right: 1px solid @color-layout-border; 58 | 59 | & > .header { 60 | a.button { 61 | margin: 0; 62 | padding: 0 .5rem; 63 | } 64 | } 65 | } 66 | 67 | &.content { 68 | display: flex; 69 | flex: 6; 70 | flex-direction: column; 71 | min-width: 50%; 72 | background-color: @color-layout-content-background; 73 | 74 | & > .formcontent, // e.g. Help plugin 75 | & > .content { 76 | height: 100%; 77 | width: 100%; 78 | overflow: auto; 79 | flex: 1; 80 | } 81 | 82 | .iframe-wrapper { 83 | width: 100%; 84 | height: 100%; 85 | flex: 1; 86 | 87 | iframe { 88 | width: 100%; 89 | height: 100%; 90 | border: 0; 91 | } 92 | } 93 | } 94 | 95 | &.sidebar { 96 | display: flex; 97 | min-width: 220px; 98 | background-color: @color-layout-sidebar-background; 99 | flex: 2; 100 | } 101 | 102 | &.list { 103 | display: flex; 104 | flex: 3; 105 | min-width: 300px; 106 | background-color: @color-layout-list-background; 107 | } 108 | & > .scroller { 109 | flex: 1; 110 | position: relative; // for .listing-info positioning 111 | } 112 | 113 | & > .content.only > .scroller { 114 | overflow: auto; 115 | } 116 | 117 | & > .header, 118 | & > .footer { 119 | background-color: @color-layout-header-background; 120 | font-size: @layout-header-font-size; 121 | font-weight: bold; 122 | line-height: @layout-header-height; 123 | height: @layout-header-height; 124 | min-height: @layout-header-height; 125 | padding: 0 .25em; 126 | margin: 0; 127 | position: relative; // for absolute positioning of searchbar 128 | overflow: hidden; 129 | white-space: nowrap; 130 | display: flex; 131 | justify-content: center; 132 | } 133 | 134 | & > .header { 135 | border-bottom: 1px solid @color-layout-border; 136 | 137 | .header-title { 138 | .overflow-ellipsis; 139 | flex: 1; 140 | text-align: center; 141 | margin: 0 -20rem; 142 | } 143 | } 144 | 145 | & > .footer { 146 | border-top: 1px solid @color-layout-border; 147 | 148 | &:empty { 149 | display: none; 150 | } 151 | } 152 | } 153 | } 154 | 155 | html.iframe { 156 | body { 157 | overflow: auto; 158 | 159 | #layout > .content { 160 | height: 100%; 161 | } 162 | } 163 | } 164 | 165 | 166 | @media screen and (max-width: @screen-width-large) { 167 | body > #layout > div.sidebar, 168 | body > #layout > div.list { 169 | min-width: 260px; 170 | flex: 3; 171 | } 172 | } 173 | 174 | @media screen and (max-width: @screen-width-medium) { 175 | } 176 | 177 | @media screen and (max-width: @screen-width-small) { 178 | body > #layout > div > .header > .toolbar { 179 | font-size: @layout-touch-header-font-size; 180 | display: none; 181 | } 182 | 183 | body > #layout > div.sidebar, 184 | body > #layout > div.list { 185 | max-width: none; 186 | border: 0; 187 | } 188 | 189 | body > #layout > div > .header { 190 | a.button { 191 | // make the button active area smaller on touch devices 192 | margin: 0 .3rem !important; 193 | padding: 0 !important; 194 | 195 | &:before { 196 | font-size: 1.75rem; 197 | height: @layout-touch-header-height; 198 | margin: 0; 199 | } 200 | 201 | &.filter:before { 202 | font-size: 1.6rem; // this icon is too big in FA5 203 | } 204 | } 205 | } 206 | 207 | body > #layout > div > .header { 208 | &.with-search:not(.no-toolbar) { 209 | .searchbar { 210 | right: @layout-touch-icon-width; 211 | } 212 | 213 | .searchfilterbar { 214 | right: (@layout-touch-icon-width * 2); 215 | } 216 | } 217 | } 218 | } 219 | 220 | @media screen and (max-width: @screen-width-xs) { 221 | } 222 | 223 | @media screen and (max-width: @screen-width-mini) { 224 | body > #layout > div.sidebar, 225 | body > #layout > div.list { 226 | min-width: @page-min-width; 227 | } 228 | } 229 | 230 | @media screen and (min-width: (@screen-width-xs + 1px)) { 231 | body > #layout > div > .header > a.menu-button { 232 | display: none; 233 | } 234 | 235 | body > #layout > .menu { 236 | // FIXME: we set background color here not in taskmenu.less, because 237 | // otherwise background is partially white on Android/iOS 238 | background-color: @color-taskmenu-background; 239 | } 240 | } 241 | 242 | @media screen and (min-width: (@screen-width-small + 1px)) { 243 | .floating-action-buttons, 244 | body > #layout > .content > .header > .header-title, 245 | body > #layout > div > .header > .buttons, 246 | body > #layout > div > .header > a.toolbar-menu-button { 247 | display: none; 248 | } 249 | 250 | body > #layout > .menu { 251 | width: @layout-menu-width/2; 252 | } 253 | } 254 | 255 | @media screen and (min-width: (@screen-width-medium + 1px)) { 256 | body > #layout > .menu { 257 | width: @layout-menu-width; 258 | } 259 | } 260 | 261 | @media screen and (min-width: (@screen-width-large + 1px)) { 262 | body > #layout > div > .header > a.back-list-button, 263 | body > #layout > div > .header > a.back-sidebar-button { 264 | display: none; 265 | } 266 | } 267 | 268 | html.layout-phone { 269 | .hidden-phone { 270 | display: none !important; 271 | } 272 | } 273 | 274 | html.layout-phone, 275 | html.layout-small { 276 | .hidden-small { 277 | display: none !important; 278 | } 279 | } 280 | 281 | html.layout-large, 282 | html.layout-normal { 283 | .hidden-big { 284 | display: none !important; 285 | } 286 | } 287 | 288 | html.layout-large { 289 | .hidden-large { 290 | display: none !important; 291 | } 292 | } 293 | -------------------------------------------------------------------------------- /styles/mixins.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Font-icons ***/ 13 | 14 | .font-icon-class { 15 | font-size: 1.25em; 16 | // FIXME: with inline-block we have some problems with icon alignment 17 | // display: inline-block; 18 | display: block; 19 | float: left; 20 | margin: 0 .25rem 0 0; 21 | width: 1.18em; 22 | height: 1em; 23 | font-family: 'Icons'; 24 | font-style: normal; 25 | font-weight: 900; 26 | text-decoration: inherit; 27 | text-align: center; 28 | speak: none; 29 | font-smoothing: antialiased; 30 | -moz-osx-font-smoothing: grayscale; 31 | -webkit-font-smoothing: antialiased; 32 | } 33 | 34 | .animated-icon-class { 35 | // fa-spin is defined in styles.less 36 | -webkit-animation: fa-spin 2s infinite linear; 37 | animation: fa-spin 2s infinite linear; 38 | } 39 | 40 | .font-icon-solid(@icon) { 41 | content: @icon; 42 | font-weight: 900; 43 | } 44 | 45 | .font-icon-regular(@icon) { 46 | content: @icon; 47 | font-weight: 400; 48 | } 49 | 50 | .overflow-ellipsis { 51 | overflow: hidden; 52 | text-overflow: ellipsis; 53 | } 54 | 55 | .font-family { 56 | font-family: Roboto, sans-serif; 57 | } 58 | 59 | .style-input-focus { 60 | border-color: @color-input-border-focus; 61 | box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow; 62 | } -------------------------------------------------------------------------------- /styles/print.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Additional styles for printouts ***/ 13 | 14 | body { 15 | overflow: auto; 16 | height: auto; 17 | } 18 | 19 | #print-layout { 20 | margin: 1rem; 21 | 22 | // Overwrites for mail message printouts 23 | 24 | .image-attachment { 25 | .image-link { 26 | margin-bottom: .5rem; 27 | } 28 | 29 | .attachment-links { 30 | display: none; 31 | } 32 | } 33 | 34 | .header-content { 35 | .message-partheaders { 36 | padding: 0 !important; 37 | border: 0; 38 | font-size: 1rem; 39 | color: inherit; 40 | } 41 | } 42 | 43 | #message-header { 44 | margin-bottom: .5rem; 45 | } 46 | 47 | .attachment-size { 48 | padding-left: .1rem; 49 | } 50 | 51 | // Overwrites for contact printouts 52 | 53 | .formcontent { 54 | padding: 0; 55 | 56 | legend { 57 | margin-top: .5rem; 58 | } 59 | 60 | .row .form-control-plaintext { 61 | padding: .1rem; 62 | } 63 | 64 | .contactfield { 65 | padding: .2rem 0; 66 | } 67 | } 68 | 69 | .propform.groupped .row.input-group .input-group-text { 70 | padding: 0; 71 | min-width: 12rem; 72 | background: #fff; 73 | border: 0; 74 | } 75 | 76 | .contact-header { 77 | margin-bottom: 0; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /styles/styles.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | @import (reference) "variables"; 13 | @import (reference) "mixins"; 14 | 15 | /*** Fonts ***/ 16 | 17 | @font-face { 18 | font-family: 'Icons'; 19 | font-style: normal; 20 | font-weight: 900; 21 | src: url("../fonts/fa-solid-900.woff2") format('woff2'), 22 | url("../fonts/fa-solid-900.woff") format('woff'); 23 | } 24 | 25 | @font-face { 26 | font-family: 'Icons'; 27 | font-style: normal; 28 | font-weight: 400; 29 | src: url("../fonts/fa-regular-400.woff2") format('woff2'), 30 | url("../fonts/fa-regular-400.woff") format('woff'); 31 | } 32 | 33 | @font-face { 34 | font-family: 'Roboto'; 35 | font-style: normal; 36 | font-weight: 400; 37 | src: local('Roboto'), local('Roboto-Regular'), 38 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+ 39 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-regular.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ 40 | } 41 | 42 | @font-face { 43 | font-family: 'Roboto'; 44 | font-style: italic; 45 | font-weight: 400; 46 | src: local('Roboto Italic'), local('Roboto-Italic'), 47 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+ 48 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-italic.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ 49 | } 50 | 51 | @font-face { 52 | font-family: 'Roboto'; 53 | font-style: normal; 54 | font-weight: 700; 55 | src: local('Roboto Bold'), local('Roboto-Bold'), 56 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+ 57 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ 58 | } 59 | 60 | @font-face { 61 | font-family: 'Roboto'; 62 | font-style: italic; 63 | font-weight: 700; 64 | src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), 65 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff2') format('woff2'), // Chrome 26+, Opera 23+, Firefox 39+ 66 | url('../fonts/roboto-v18-greek-ext_cyrillic-ext_cyrillic_greek_latin-ext_latin-700italic.woff') format('woff'); // Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ 67 | } 68 | 69 | /* E.g. for animated 'loading' icon */ 70 | 71 | @-webkit-keyframes fa-spin { 72 | 0% { 73 | -webkit-transform: rotate(0deg); 74 | transform: rotate(0deg); 75 | } 76 | 100% { 77 | -webkit-transform: rotate(359deg); 78 | transform: rotate(359deg); 79 | } 80 | } 81 | @keyframes fa-spin { 82 | 0% { 83 | -webkit-transform: rotate(0deg); 84 | transform: rotate(0deg); 85 | } 86 | 100% { 87 | -webkit-transform: rotate(359deg); 88 | transform: rotate(359deg); 89 | } 90 | } 91 | 92 | 93 | /* Reset some Bootstrap style */ 94 | 95 | body, button, input, optgroup, select, textarea, .popover { 96 | .font-family; 97 | } 98 | 99 | button, input, select, textarea { 100 | line-height: initial; 101 | } 102 | 103 | input { 104 | vertical-align: middle; 105 | } 106 | 107 | a { 108 | color: @color-link; 109 | 110 | &:hover { 111 | color: @color-link-hover; 112 | } 113 | 114 | &.disabled:not(.btn) { 115 | opacity: .5; 116 | } 117 | } 118 | 119 | @import "layout"; 120 | 121 | /*** Widgets ***/ 122 | 123 | @import "widgets/common"; 124 | @import "widgets/buttons"; 125 | @import "widgets/jqueryui"; 126 | @import "widgets/dialogs"; 127 | @import "widgets/taskmenu"; 128 | @import "widgets/messages"; 129 | @import "widgets/toolbar"; 130 | @import "widgets/searchbar"; 131 | @import "widgets/lists"; 132 | @import "widgets/forms"; 133 | @import "widgets/mail"; 134 | 135 | 136 | 137 | /*** Login form ***/ 138 | 139 | .task-login #layout > .content { 140 | text-align: center; 141 | width: 100%; 142 | background: url(../images/watermark.jpg) center -20px no-repeat; 143 | background-size: auto 40%; 144 | } 145 | 146 | #login-form { 147 | margin: 0 auto; 148 | top: 35vh; 149 | width: 95%; 150 | max-width: 280px; 151 | position: relative; 152 | 153 | // Fixes input width and position in IE11 154 | .row { 155 | max-width: 280px; 156 | margin-right: 0; 157 | margin-left: 0; 158 | } 159 | } 160 | 161 | #login-footer { 162 | flex: 1; 163 | color: @color-black-shade-text; 164 | } 165 | 166 | #login-addon { 167 | position: absolute; 168 | bottom: 0; 169 | max-height: 30%; 170 | margin: 1rem !important; 171 | width: auto !important; 172 | overflow: auto; 173 | 174 | @media screen and (min-width: (@screen-width-small + 1px)) { 175 | max-width: @screen-width-small; 176 | margin: auto !important; 177 | bottom: 1rem; 178 | left: 0; 179 | right: 0; 180 | } 181 | } 182 | 183 | 184 | /*** Addressbook UI ***/ 185 | 186 | #contactpic { 187 | min-width: @layout-contact-icon-width; 188 | min-height: @layout-contact-icon-width; 189 | border-radius: .5rem; 190 | overflow: hidden; 191 | display: flex; 192 | justify-content: center; 193 | align-items: center; 194 | 195 | img { 196 | max-width: @layout-contact-icon-width; 197 | max-height: @layout-contact-icon-height; 198 | } 199 | } 200 | 201 | #contacthead { 202 | .names { 203 | margin-bottom: .5rem; 204 | 205 | span.namefield { 206 | font-size: 1.5rem; 207 | font-weight: bold; 208 | line-height: 1.2; 209 | } 210 | } 211 | 212 | &.readonly { 213 | .source.row { 214 | color: @color-form-hint; 215 | font-size: 90%; 216 | margin-bottom: .25rem; 217 | } 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /styles/variables.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | @import (reference) "fontawesome"; 13 | @import (reference) "colors"; 14 | 15 | @screen-width-large: 1200px; 16 | @screen-width-medium: 1024px; 17 | @screen-width-small: 768px; 18 | @screen-width-xs: 480px; 19 | @screen-width-mini: 320px; 20 | @screen-width-touch: @screen-width-medium; 21 | @screen-width-bs-phone: 576px; 22 | 23 | @page-font-size: 14px; 24 | @page-min-width: 240px; 25 | 26 | @layout-menu-width: 5rem; 27 | @layout-header-height: 4.2rem; 28 | @layout-header-font-size: 1rem; 29 | @layout-pagenav-height: 2rem; 30 | 31 | @layout-touch-header-height: @layout-header-height; 32 | @layout-touch-header-font-size: 1.2rem; 33 | @layout-touch-menu-record-height: 3.4rem; 34 | @layout-touch-menu-record-font-size: 1.2rem; 35 | @layout-touch-icon-width: 2.2em; 36 | 37 | @layout-mobile-menu-width: (@screen-width-mini * .85); 38 | 39 | @layout-contact-icon-width: 112px; 40 | @layout-contact-icon-height: 135px; 41 | 42 | @listing-line-height: 2.5rem; 43 | @listing-touch-line-height: 3.4rem; 44 | @listing-treetoggle-width: 1.5em; 45 | 46 | // Additional icons 47 | @icon-resize-corner: data-uri("data:image/svg+xml;charset=utf-8", "../images/corner-handle.svg"); // size: 512x512 48 | -------------------------------------------------------------------------------- /styles/widgets/buttons.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Buttons ***/ 13 | 14 | 15 | a.rcmaddcontact { 16 | display: none; 17 | } 18 | 19 | .button.disabled { 20 | opacity: .5; 21 | } 22 | 23 | a.button { 24 | text-decoration: none; 25 | 26 | &.active { 27 | cursor: pointer; 28 | } 29 | } 30 | 31 | 32 | /* font-icons */ 33 | 34 | a.button.icon, 35 | button.btn { 36 | &:before { 37 | &:extend(.font-icon-class); 38 | } 39 | &.toolbar-menu-button:before { 40 | content: @fa-var-ellipsis-v; 41 | } 42 | &.menu-button:before { 43 | content: @fa-var-bars; 44 | } 45 | &.back-sidebar-button:before, 46 | &.back-content-button:before, 47 | &.back-list-button:before { 48 | content: @fa-var-chevron-left; 49 | } 50 | &.generate:before, 51 | &.yes:before, 52 | &.submit:before, 53 | &.continue:before, 54 | &.save:before { 55 | content: @fa-var-check; 56 | } 57 | &.create:before { 58 | content: @fa-var-plus-square; 59 | } 60 | &.edit:before { 61 | content: @fa-var-pencil-alt; 62 | } 63 | &.qrcode:before { 64 | content: @fa-var-qrcode; 65 | } 66 | &.search:before { 67 | content: @fa-var-search; 68 | } 69 | &.filter:before { 70 | content: @fa-var-filter; 71 | font-size: 1.2em; // this icon is too-big in FA5 72 | } 73 | &.import:before { 74 | content: @fa-var-upload; 75 | } 76 | &.export:before { 77 | content: @fa-var-download; 78 | } 79 | &.discard:before, 80 | &.delete:before { 81 | .font-icon-regular(@fa-var-trash-alt); 82 | } 83 | &.next:before { 84 | content: @fa-var-arrow-right; 85 | } 86 | &.restore:before { 87 | content: @fa-var-undo; 88 | } 89 | &.send:before, 90 | &.bounce:before { 91 | content: @fa-var-paper-plane; 92 | } 93 | &.attach:before { 94 | content: @fa-var-paperclip; 95 | } 96 | &.no:before, 97 | &.close:before, 98 | &.cancel:before { 99 | content: @fa-var-times; 100 | } 101 | &.mark:before { 102 | .font-icon-regular(@fa-var-star); 103 | } 104 | &.back:before { 105 | content: @fa-var-chevron-left; 106 | } 107 | &.remove:before { 108 | content: @fa-var-times; 109 | } 110 | &.unlock:before { 111 | content: @fa-var-unlock; 112 | } 113 | &.help:before { 114 | .font-icon-regular(@fa-var-life-ring); 115 | } 116 | &.toggleselect:before { 117 | .font-icon-regular(@fa-var-check-square); 118 | } 119 | &.folders:before { 120 | content: @fa-var-folder-open; 121 | } 122 | &.tools:before, 123 | &.settings:before { 124 | content: @fa-var-wrench; 125 | } 126 | } 127 | 128 | a.btn, 129 | button.btn { 130 | // FIXME: Maybe button text (and icon) alignment requires some rework 131 | padding-bottom: .5rem; 132 | 133 | &:before { 134 | display: inline !important; 135 | float: none !important; 136 | } 137 | } 138 | 139 | a.button.icon { 140 | &.dropdown:before { 141 | content: @fa-var-caret-down; 142 | font-size: 1em; 143 | } 144 | & > span.inner { 145 | display: none; 146 | } 147 | } 148 | 149 | html.touch { 150 | .btn:focus { 151 | box-shadow: none; 152 | } 153 | } 154 | 155 | @floating-action-button-size: 4rem; 156 | 157 | .floating-action-buttons { 158 | position: absolute; 159 | right: 0; 160 | bottom: 0; 161 | 162 | .footer:not(:empty) + & { 163 | bottom: @layout-touch-header-height; 164 | } 165 | 166 | a.button { 167 | display: block; 168 | float: left; 169 | width: @floating-action-button-size; 170 | height: @floating-action-button-size; 171 | border-radius: 50%; 172 | background: @color-taskmenu-background; 173 | color: white; 174 | opacity: .95; 175 | box-shadow: 0 0 5px 5px @color-popover-shadow; 176 | margin: 0 1rem 1rem 0; 177 | 178 | &:before { 179 | &:extend(.font-icon-class); 180 | content: @fa-var-plus; 181 | width: @floating-action-button-size; 182 | height: @floating-action-button-size; 183 | line-height: @floating-action-button-size; 184 | } 185 | 186 | .inner { 187 | display: none; 188 | } 189 | } 190 | } 191 | 192 | /*** Bootstrap button style overrides ***/ 193 | 194 | .btn-secondary { 195 | color: @color-btn-secondary; 196 | background: @color-btn-secondary-background; 197 | border-color: @color-btn-secondary-background; 198 | 199 | &:focus { 200 | box-shadow: 0 0 0 .2rem fade(@color-btn-secondary-background, 50%); 201 | } 202 | 203 | &:hover { 204 | background: darken(@color-btn-secondary-background, 8%); 205 | border-color: darken(@color-btn-secondary-background, 10%); 206 | } 207 | 208 | &.disabled, 209 | &:disabled { 210 | background: lighten(@color-btn-secondary-background, 20%); 211 | border-color: lighten(@color-btn-secondary-background, 20%); 212 | opacity: 1; 213 | } 214 | 215 | &:not([disabled]):not(.disabled):active { 216 | background: darken(@color-btn-secondary-background, 11%); 217 | border-color: darken(@color-btn-secondary-background, 13%); 218 | box-shadow: 0 0 0 .2rem fade(@color-btn-secondary-background, 53%); 219 | } 220 | } 221 | 222 | .btn-primary { 223 | color: @color-btn-primary; 224 | background: @color-btn-primary-background; 225 | border-color: @color-btn-primary-background; 226 | 227 | &:focus { 228 | box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 50%); 229 | } 230 | 231 | &:hover { 232 | background: darken(@color-btn-primary-background, 8%); 233 | border-color: darken(@color-btn-primary-background, 10%); 234 | } 235 | 236 | &.disabled, 237 | &:disabled { 238 | background: lighten(@color-btn-primary-background, 20%); 239 | border-color: lighten(@color-btn-primary-background, 20%); 240 | opacity: 1; 241 | } 242 | 243 | &:not([disabled]):not(.disabled):active { 244 | background: darken(@color-btn-primary-background, 11%); 245 | border-color: darken(@color-btn-primary-background, 13%); 246 | box-shadow: 0 0 0 .2rem fade(@color-btn-primary-background, 53%); 247 | } 248 | } 249 | 250 | .btn-danger { 251 | color: @color-btn-danger; 252 | background: @color-btn-danger-background; 253 | border-color: @color-btn-danger-background; 254 | 255 | &:focus { 256 | box-shadow: 0 0 0 .2rem fade(@color-btn-danger-background, 50%); 257 | } 258 | 259 | &:hover { 260 | background: darken(@color-btn-danger-background, 8%); 261 | border-color: darken(@color-btn-danger-background, 10%); 262 | } 263 | 264 | &.disabled, 265 | &:disabled { 266 | background: lighten(@color-btn-danger-background, 20%); 267 | border-color: lighten(@color-btn-danger-background, 20%); 268 | opacity: 1; 269 | } 270 | 271 | &:not([disabled]):not(.disabled):active { 272 | background: darken(@color-btn-danger-background, 11%); 273 | border-color: darken(@color-btn-danger-background, 13%); 274 | box-shadow: 0 0 0 .2rem fade(@color-btn-danger-background, 53%); 275 | } 276 | } 277 | -------------------------------------------------------------------------------- /styles/widgets/common.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Common UI elements ***/ 13 | 14 | .hidden, 15 | .voice { 16 | display: none !important; 17 | } 18 | 19 | font.bold { 20 | font-weight: bold; 21 | } 22 | 23 | #rcmdraglayer { 24 | min-width: 260px; 25 | width: 260px; 26 | background-color: @color-drag-layer-background; 27 | color: @color-drag-layer; 28 | box-shadow: 3px 3px 5px @color-drag-layer-shadow; 29 | border-radius: .3rem; 30 | z-index: 250; 31 | opacity: .92; 32 | padding: .5rem; 33 | white-space: nowrap; 34 | 35 | div { 36 | line-height: 1.6em; 37 | .overflow-ellipsis; 38 | } 39 | } 40 | 41 | .frame-content { 42 | padding: 1rem; 43 | 44 | h2 { 45 | font-weight: bold; 46 | font-size: 1.5em; 47 | } 48 | 49 | h3 { 50 | font-weight: bold; 51 | font-size: 1.25em; 52 | } 53 | } 54 | 55 | .listbox { 56 | .scroller { 57 | width: 100%; 58 | overflow-x: hidden; 59 | overflow-y: auto; 60 | } 61 | 62 | .navlist { 63 | height: 0; 64 | flex: initial !important; 65 | 66 | .listing { 67 | border-bottom: 1px solid @color-layout-border; 68 | 69 | tr:last-child td, 70 | li:last-child { 71 | border-bottom: 0; 72 | } 73 | } 74 | } 75 | } 76 | 77 | 78 | .contact-header { 79 | display: flex; 80 | margin-bottom: 1rem; 81 | 82 | .contact-photo { 83 | min-width: @layout-contact-icon-width; 84 | } 85 | 86 | .contact-head { 87 | margin-left: 1rem; 88 | 89 | legend { 90 | display: none; 91 | } 92 | } 93 | } 94 | 95 | 96 | @image-attachment-size: 250px; 97 | 98 | // this is when image thumbnails are enabled 99 | p.image-attachment { 100 | position: relative; 101 | border: 1px solid @color-border; 102 | border-radius: .3rem; 103 | background-color: @color-message-background; 104 | float: left; 105 | margin: .5rem; 106 | min-width: 47%; 107 | min-height: @image-attachment-size; 108 | overflow: hidden; 109 | // use flexbox to center the image 110 | display: flex; 111 | justify-content: center; 112 | 113 | @media screen and (max-width: @screen-width-xs) { 114 | float: none; 115 | margin: .5rem 0 .5rem 0; 116 | } 117 | 118 | .image-link { 119 | align-self: center; 120 | text-align: center; 121 | margin: 1.6rem .5rem; 122 | } 123 | 124 | span { 125 | color: @color-form-hint; 126 | padding: 0 .5rem; 127 | font-size: 90%; 128 | white-space: nowrap; 129 | position: absolute; 130 | line-height: 1.5rem; 131 | } 132 | 133 | .image-filename { 134 | .overflow-ellipsis; 135 | left: 0; 136 | top: 0; 137 | right: 0; 138 | padding-right: 4rem; 139 | } 140 | 141 | .image-filesize { 142 | right: 0; 143 | top: 0; 144 | } 145 | 146 | .attachment-links { 147 | position: absolute; 148 | bottom: 0; 149 | left: 0; 150 | width: 100%; 151 | text-align: center; 152 | 153 | a { 154 | text-decoration: none; 155 | display: inline-block; 156 | padding: 0 .5rem; 157 | line-height: 1.5rem; 158 | } 159 | 160 | a:before { 161 | &:extend(.font-icon-class); 162 | display: inline-block; 163 | } 164 | 165 | a.open:before { 166 | content: @fa-var-external-link-square-alt; 167 | } 168 | 169 | a.download:before { 170 | content: @fa-var-download; 171 | } 172 | } 173 | } 174 | 175 | // this is when image thumbnails are disabled 176 | fieldset.image-attachment { 177 | margin-top: .5rem; 178 | 179 | legend { 180 | color: @color-form-hint; 181 | font-size: .9rem; 182 | border-top: 1px solid lighten(@color-mail-headers, 50%); 183 | margin: 0; 184 | } 185 | 186 | img { 187 | max-width: 100%; 188 | } 189 | } 190 | 191 | #folder-selector { 192 | overflow-y: auto; 193 | } 194 | 195 | #layout > .content .watermark { 196 | background: url(../images/watermark.jpg) center no-repeat; 197 | width: 100%; 198 | height: 100%; 199 | } 200 | 201 | .noselect { 202 | user-select: none; 203 | -moz-user-select: none; 204 | -khtml-user-select: none; 205 | -ms-user-select: none; 206 | -webkit-user-select: none; 207 | } 208 | 209 | .iframe-loader { 210 | width: 100%; 211 | position: absolute; 212 | top: 0; 213 | bottom: 0; 214 | background-color: rgba(255, 255, 255, .95); 215 | display: flex; 216 | align-items: center; 217 | justify-content: center; 218 | 219 | .spinner { 220 | position: relative; 221 | display: inline-block; 222 | width: 7rem; 223 | height: 7rem; 224 | overflow: hidden; 225 | text-indent: -999em; 226 | color: @color-spinner-circle; 227 | border: 1rem solid; 228 | border-color: currentColor @color-spinner-item currentColor currentColor; 229 | border-radius: 50%; 230 | -webkit-animation: fa-spin 1s infinite linear; 231 | animation: fa-spin 1s infinite linear; 232 | } 233 | } 234 | 235 | .footer.toolbar + .iframe-loader { 236 | top: @layout-header-height; 237 | bottom: @layout-header-height; 238 | } 239 | 240 | // iOS: Fix scrolling of iframe, display scrollbars on scrollable elements 241 | .ios-scroll { 242 | padding: 0; 243 | -webkit-overflow-scrolling: touch !important; 244 | overflow: scroll !important; 245 | 246 | &.iframe-wrapper { 247 | margin-top: 1px; // FIXME: without this scrolling hides the wrapper neighbours' border 248 | } 249 | } 250 | 251 | .webkit-scroller { 252 | &::-webkit-scrollbar { 253 | -webkit-appearance: none; 254 | } 255 | 256 | &::-webkit-scrollbar:vertical { 257 | width: .6rem; 258 | } 259 | 260 | &::-webkit-scrollbar:horizontal { 261 | height: .6rem; 262 | } 263 | 264 | &::-webkit-scrollbar-thumb { 265 | background-color: rgba(0, 0, 0, .4); 266 | border-radius: .3rem; 267 | border: 2px solid #fff; 268 | } 269 | } 270 | 271 | .quota-widget { 272 | width: 5rem; 273 | max-width: 8rem; 274 | padding: .5rem; 275 | text-align: center; 276 | position: relative; 277 | 278 | .count { 279 | display: block; 280 | color: @color-quota-text; 281 | font-size: 1.1rem; 282 | line-height: 2; 283 | } 284 | 285 | .bar { 286 | display: block; 287 | height: .5rem; 288 | position: absolute; 289 | bottom: .85rem; 290 | left: .5rem; 291 | right: .5rem; 292 | background-color: @color-quota-background; 293 | border-radius: .25rem; 294 | } 295 | 296 | .value { 297 | display: block; 298 | background-color: @color-quota-value; 299 | border-radius: .25rem; 300 | height: .5rem; 301 | opacity: .75; 302 | 303 | &.warning { 304 | background-color: @color-quota-value-warning; 305 | } 306 | } 307 | } 308 | 309 | .quota-info { 310 | width: 100%; 311 | display: table !important; 312 | 313 | td,th { 314 | text-align: center; 315 | white-space: nowrap; 316 | } 317 | 318 | th { 319 | border-top: 0; 320 | } 321 | 322 | .root { 323 | line-height: 1; 324 | font-style: italic; 325 | color: @color-popover-separator; 326 | background-color: @color-popover-separator-background; 327 | } 328 | 329 | th:first-child, 330 | .name { 331 | text-align: left; 332 | } 333 | } 334 | 335 | .table-widget { 336 | display: flex; 337 | flex-direction: column; 338 | margin-bottom: .5rem; 339 | border: 1px solid @color-table-border; 340 | 341 | & > .content { 342 | overflow-x: auto; 343 | flex-grow: 1; 344 | height: 18.5em; 345 | 346 | table th { 347 | border-top: 0; 348 | } 349 | } 350 | 351 | & > .footer { 352 | height: 3.5rem; 353 | border-top: 1px solid @color-table-border; 354 | 355 | a.button { 356 | padding: 0; 357 | } 358 | } 359 | 360 | table { 361 | margin: 0; 362 | max-height: 18.5em; 363 | } 364 | 365 | // Options table is a table with first column for identifier/description 366 | // and other columns for a state flag. E.g. ACL table 367 | table.options-table { 368 | td,th { 369 | text-align: center; 370 | vertical-align: middle; 371 | 372 | &:first-child { 373 | .overflow-ellipsis; 374 | text-align: left; 375 | } 376 | } 377 | 378 | tr:last-child td { 379 | border-bottom: 1px solid @color-table-border; 380 | } 381 | 382 | tr.selected td { 383 | background-color: @color-table-selected-background; 384 | color: @color-table-selected; 385 | outline: 0; 386 | } 387 | 388 | td:not(:first-child) span { 389 | display: inline-block; 390 | line-height: 1.25; 391 | 392 | &:before { 393 | &:extend(.font-icon-class); 394 | } 395 | } 396 | 397 | td.enabled span:before { 398 | content: @fa-var-check; 399 | } 400 | 401 | td.partial span:before { 402 | opacity: .3; 403 | content: @fa-var-check; 404 | } 405 | } 406 | } 407 | 408 | table.compact-table { 409 | margin: 0; 410 | 411 | *:not(.invalid-feedback) { 412 | font-size: inherit; 413 | } 414 | 415 | td { 416 | padding: .25rem; 417 | border: 0; 418 | } 419 | 420 | td:first-child { 421 | padding-left: 0; 422 | } 423 | 424 | td:last-child { 425 | padding-right: 0; 426 | } 427 | } 428 | 429 | table.table { 430 | .checkbox-cell { 431 | width: 3rem; 432 | white-space: nowrap; 433 | overflow: hidden; 434 | text-align: center; 435 | 436 | input.icon-checkbox + label { 437 | padding: 0; 438 | 439 | &:before { 440 | line-height: 1; 441 | height: 1em; 442 | } 443 | } 444 | } 445 | 446 | th.checkbox-cell { 447 | padding: .75rem 0; 448 | max-width: 1rem; 449 | 450 | &:before { 451 | &:extend(.font-icon-class); 452 | cursor: pointer; 453 | margin: 0 1rem; 454 | line-height: 1; 455 | } 456 | 457 | &.subscription:before { 458 | content: @fa-var-rss-square; 459 | } 460 | 461 | &.alarm:before { 462 | .font-icon-regular(@fa-var-bell); 463 | } 464 | 465 | &.read:before { 466 | content: @fa-var-eye; 467 | } 468 | 469 | &.write:before { 470 | content: @fa-var-pencil-alt; 471 | } 472 | } 473 | 474 | .buttons-cell { 475 | width: 1%; 476 | white-space: nowrap; 477 | text-align: center; 478 | 479 | a.button:before { 480 | line-height: 1; 481 | float: none; 482 | display: inline-block; 483 | } 484 | 485 | @media screen and (min-width: @screen-width-xs) { 486 | a.button .inner { 487 | display: inline; 488 | } 489 | } 490 | } 491 | 492 | label { 493 | margin: 0; 494 | display: inline; 495 | } 496 | 497 | fieldset.tab-pane & thead th { 498 | border: 0; 499 | } 500 | } 501 | 502 | html.touch { 503 | table.table { 504 | th.checkbox-cell:before { 505 | font-size: 1.5rem; 506 | } 507 | } 508 | } 509 | 510 | 511 | /* Bootstrap's .table style overwrites */ 512 | .table { 513 | thead th { 514 | border-width: 1px; 515 | white-space: nowrap; 516 | } 517 | } 518 | -------------------------------------------------------------------------------- /styles/widgets/dialogs.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Dialogs and popovers ***/ 13 | 14 | .popupmenu { 15 | display: none; 16 | padding: 0; 17 | min-width: 180px; 18 | 19 | li > a { 20 | width: 100%; 21 | } 22 | 23 | &.propform { 24 | overflow: hidden; 25 | margin-top: 1rem; 26 | padding: .25rem; // so overflow do not truncate focus outline on inputs 27 | } 28 | 29 | &.simplelist { 30 | min-width: 80px; 31 | } 32 | } 33 | 34 | .popup.justified { 35 | display: flex; 36 | justify-content: space-around; 37 | } 38 | 39 | .popover-body { 40 | padding: 0; 41 | overflow-x: hidden; 42 | 43 | & > .popupmenu { 44 | display: block !important; 45 | } 46 | } 47 | 48 | .popover { 49 | box-shadow: 3px 3px 5px @color-popover-shadow; 50 | padding: 0; 51 | 52 | .popover-header { 53 | // On mobile don't display popup arrows and titles 54 | display: none; 55 | } 56 | } 57 | 58 | #rcmKSearchpane { 59 | width: auto; 60 | max-width: none; 61 | overflow: hidden; 62 | 63 | li { 64 | padding-right: .5rem; 65 | } 66 | } 67 | 68 | html.layout-small, 69 | html.layout-phone { 70 | .popover { 71 | margin: 0 !important; 72 | padding: 0; 73 | right: 0; 74 | bottom: 0; 75 | top: 0; 76 | width: @layout-mobile-menu-width; 77 | transform: none !important; 78 | border-radius: 0; 79 | border: 0; 80 | display: flex; 81 | flex-direction: column; 82 | 83 | div.arrow { 84 | display: none; 85 | } 86 | 87 | .listing li:last-child { 88 | border-bottom: 1px solid @color-list-border; 89 | } 90 | } 91 | 92 | .popover:not(#rcmKSearchpane) { 93 | left: initial !important; 94 | } 95 | 96 | .popover-overlay { 97 | z-index: 1000; 98 | background-color: @color-dialog-overlay-background; 99 | position: absolute; 100 | top: 0; 101 | bottom: 0; 102 | width: 100%; 103 | } 104 | 105 | #rcmKSearchpane { 106 | bottom: auto; 107 | border: 1px solid @color-input-border; 108 | box-shadow: none; 109 | } 110 | 111 | .popover-header { 112 | display: block; 113 | border-radius: 0; 114 | border: 0; 115 | padding: 0 .5em; 116 | height: @layout-touch-header-height; 117 | line-height: @layout-touch-header-height; 118 | font-size: @layout-touch-header-font-size; 119 | color: @color-popover-mobile-header; 120 | background-color: @color-popover-mobile-header-background; 121 | 122 | a { 123 | display: inline-block; 124 | width: 100%; 125 | } 126 | } 127 | 128 | .popover-body > * { 129 | max-height: 100% !important; 130 | } 131 | } 132 | 133 | html.touch .popover { 134 | .listing { 135 | li a { 136 | line-height: @layout-touch-menu-record-height; 137 | font-size: @layout-touch-menu-record-font-size; 138 | padding: 0 .5em; 139 | 140 | &:before { 141 | float: left; // overwrite icon float to have unified element height 142 | } 143 | } 144 | } 145 | } 146 | 147 | /** PGP Key search/import dialog **/ 148 | 149 | .pgpkeyimport { 150 | div.key { 151 | position: relative; 152 | padding: .5rem 0; 153 | 154 | &.revoked, 155 | &.disabled { 156 | color: @color-list-secondary; 157 | } 158 | 159 | label { 160 | display: inline-block; 161 | margin-right: 0.5em; 162 | margin-bottom: 0; 163 | 164 | &:after { 165 | content: ":"; 166 | } 167 | 168 | &.keyid { 169 | display: none; 170 | } 171 | } 172 | 173 | label + a, 174 | label + span { 175 | line-height: 2.6rem; 176 | margin-right: 1em; 177 | white-space: nowrap; 178 | text-decoration: none; 179 | } 180 | 181 | label.keyid + a { 182 | font-weight: bold; 183 | 184 | &:before { 185 | &:extend(.font-icon-class); 186 | content: @fa-var-key; 187 | } 188 | } 189 | } 190 | 191 | ul.uids { 192 | margin: 0; 193 | padding: 0; 194 | } 195 | 196 | li.uid { 197 | border: 0; 198 | padding: .25rem 0 0 1.5em; 199 | line-height: 1.5rem !important; 200 | list-style-type: none; 201 | 202 | &:before { 203 | &:extend(.font-icon-class); 204 | content: @fa-var-user; 205 | opacity: 0.25; 206 | font-size: 1em; 207 | line-height: 1.25; 208 | } 209 | } 210 | 211 | button.importkey { 212 | position: absolute; 213 | top: .5rem; 214 | right: 0; 215 | } 216 | 217 | button[disabled] { 218 | display: none; 219 | } 220 | } 221 | -------------------------------------------------------------------------------- /styles/widgets/jqueryui.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** jQuery-UI widgets' style overrides ***/ 13 | 14 | .ui-widget-overlay { 15 | background-color: @color-dialog-overlay-background; 16 | opacity: 1 !important; // override jQuery-UI opacity, the color above is semi-transparent 17 | } 18 | 19 | .ui-widget { 20 | border: 1px solid @color-datepicker-border; 21 | box-shadow: 3px 3px 5px @color-popover-shadow; 22 | border-radius: .3rem; 23 | } 24 | 25 | .ui-menu { 26 | overflow-y: auto; 27 | overflow-x: hidden; 28 | max-height: 400px; 29 | border-radius: .3rem; 30 | 31 | .ui-state-active { 32 | border: 0 !important; 33 | background-color: @color-toolbarmenu-hover-background !important; 34 | } 35 | 36 | .ui-menu-item { 37 | white-space: nowrap; 38 | } 39 | 40 | .ui-menu-item-wrapper { 41 | margin: 0 !important; 42 | } 43 | } 44 | 45 | .ui-dialog { 46 | border-radius: 0; 47 | box-shadow: none; 48 | 49 | &.no-titlebar { 50 | .ui-dialog-titlebar { 51 | display: none; 52 | } 53 | } 54 | 55 | .ui-dialog-titlebar { 56 | height: @layout-header-height; 57 | border-bottom: 1px solid @color-dialog-header-border; 58 | 59 | button { 60 | &:before { 61 | margin: 0; 62 | } 63 | } 64 | } 65 | 66 | .ui-dialog-title { 67 | line-height: @layout-header-height; 68 | font-size: 1.25rem; 69 | padding: 0 3rem 0 1rem; 70 | color: @color-dialog-header; 71 | } 72 | 73 | .ui-dialog-titlebar-close { 74 | border: 0; 75 | color: @color-dialog-header; 76 | background: transparent; 77 | right: 0; 78 | top: 0; 79 | position: absolute; 80 | height: (@layout-header-height - .7rem); 81 | margin: .25rem; 82 | cursor: pointer; 83 | 84 | &:before { 85 | &:extend(.font-icon-class); 86 | content: @fa-var-times; 87 | } 88 | } 89 | 90 | .ui-dialog-content { 91 | // fixes resize issue e.g. in qr-code dialog 92 | box-sizing: initial; 93 | 94 | & > .popupmenu { 95 | display: block !important; 96 | } 97 | } 98 | 99 | .ui-dialog-buttonpane { 100 | .ui-dialog-buttonset { 101 | display: flex; 102 | justify-content: flex-end; 103 | 104 | button { 105 | .overflow-ellipsis; 106 | min-width: 5rem; 107 | margin: .65rem .3rem; 108 | 109 | &:last-child { 110 | margin-right: 0; 111 | } 112 | } 113 | } 114 | } 115 | 116 | iframe, 117 | .ui-dialog-content.iframe { 118 | padding: 0; 119 | width: 100% !important; 120 | height: 100%; 121 | border: 0; 122 | overflow: hidden; 123 | } 124 | } 125 | 126 | // Overwriting this icon generally prevents from loading bigger images sprite from jQuery-UI 127 | .ui-widget-content .ui-icon.ui-resizable-se { 128 | background: @icon-resize-corner; 129 | background-size: cover; 130 | } 131 | 132 | /* FIXME: why do I need !important here? */ 133 | 134 | @media screen and (max-width: @screen-width-xs) { 135 | .ui-dialog { 136 | width: 100% !important; 137 | height: 100% !important; 138 | display: flex; 139 | flex-direction: column; 140 | 141 | .ui-resizable-handle, 142 | .ui-dialog-titlebar-close { 143 | display: none !important; 144 | } 145 | 146 | .ui-dialog-titlebar { 147 | height: @layout-touch-header-height; 148 | text-align: center; 149 | } 150 | 151 | .ui-dialog-title { 152 | line-height: @layout-touch-header-height; 153 | font-size: @layout-header-font-size; 154 | padding: 0 1rem; 155 | } 156 | 157 | .ui-dialog-content { 158 | flex: 1; 159 | &:not(.iframe) { 160 | padding: 1rem; 161 | } 162 | } 163 | 164 | .ui-dialog-buttonpane { 165 | padding: 0 !important; 166 | text-align: center !important; 167 | border-top: 1px solid @color-dialog-header-border; 168 | height: @layout-header-height !important; 169 | 170 | .ui-dialog-buttonset { 171 | justify-content: space-around; 172 | 173 | button { 174 | margin: 0 !important; 175 | border: 0 !important; 176 | height: @layout-header-height; 177 | box-shadow: none; 178 | 179 | &:before { 180 | display: block !important; 181 | width: auto; 182 | height: 1.25em; 183 | margin: 0; 184 | } 185 | 186 | &:active { 187 | box-shadow: none; 188 | } 189 | 190 | &.btn-primary, 191 | &.btn-secondary { 192 | color: @color-toolbar-button; 193 | background: transparent; 194 | } 195 | 196 | &.btn-danger { 197 | color: @color-btn-danger-background; 198 | background: transparent; 199 | } 200 | 201 | &.disabled, 202 | &:disabled { 203 | opacity: .5; 204 | } 205 | } 206 | } 207 | } 208 | } 209 | } 210 | 211 | /* Datepicker widget */ 212 | 213 | .ui-datepicker { 214 | z-index: 3 !important; // above Bootstrap form controls that use z-index: 3 215 | // Always display datepicker centered, overwriting widgets position 216 | position: fixed !important; 217 | top: 50% !important; 218 | left: 50% !important; 219 | transform: translate(-50%, -50%); 220 | box-shadow: 10px 10px 10px 1000px @color-dialog-overlay-background; 221 | 222 | .ui-datepicker-header, 223 | .ui-datepicker-title { 224 | line-height: 4rem; 225 | height: 4rem; 226 | padding: 0; 227 | } 228 | 229 | .ui-datepicker-header { 230 | border-bottom: 1px solid @color-dialog-header-border; 231 | 232 | a { 233 | height: 4rem; 234 | } 235 | 236 | select { 237 | display: inline-block; 238 | } 239 | } 240 | .ui-icon { 241 | background-image: none !important; 242 | background-position: none !important; 243 | } 244 | 245 | .ui-datepicker-prev, 246 | .ui-datepicker-next { 247 | cursor: pointer; 248 | width: auto; 249 | 250 | &:before { 251 | &:extend(.font-icon-class); 252 | content: "\f053"; 253 | margin: 0 .25em; 254 | height: auto; 255 | width: 1em; 256 | } 257 | } 258 | 259 | .ui-datepicker-prev:before { 260 | content: "\f053"; 261 | } 262 | 263 | .ui-datepicker-next:before { 264 | content: "\f054"; 265 | } 266 | 267 | td a { 268 | padding: 0; 269 | line-height: 1.8em; 270 | border-radius: .3rem; 271 | } 272 | 273 | .ui-state-default, 274 | &.ui-widget-content .ui-state-default { 275 | border: 0; 276 | background: transparent; 277 | color: @color-datepicker-font; 278 | } 279 | 280 | .ui-state-highlight, 281 | &.ui-widget-content .ui-state-highlight { 282 | background: @color-datepicker-highlight-background; 283 | color: @color-datepicker-highlight; 284 | } 285 | 286 | .ui-state-active, 287 | &.ui-widget-content .ui-state-active { 288 | background: @color-datepicker-active-background; 289 | color: @color-datepicker-active; 290 | font-weight: bold; 291 | } 292 | } 293 | 294 | html.touch { 295 | .ui-datepicker { 296 | min-width: (@screen-width-mini - 20px); 297 | 298 | td a { 299 | font-size: 1.2em; 300 | line-height: 2.2em; 301 | } 302 | } 303 | } 304 | 305 | .minicolors-panel { 306 | border: 1px solid @color-datepicker-border; 307 | box-shadow: 3px 3px 5px @color-popover-shadow; 308 | border-radius: .3rem; 309 | height: 152px; 310 | padding: 1px; 311 | } 312 | 313 | .input-group { 314 | .minicolors-input { 315 | width: 100%; 316 | // needed so minicolors panel is not out of screen 317 | // when the input is on the right side, e.g. Calendar plugin settings 318 | // This is obviously minicolors script issue 319 | min-width: 130px; 320 | border-left: 0; 321 | border-right: 0; 322 | } 323 | 324 | .minicolors-swatch { 325 | height: 25px !important; 326 | } 327 | } 328 | 329 | @media screen and (max-width: @screen-width-mini) { 330 | .ui-widget-content { 331 | border-radius: 0; 332 | left: 0 !important; 333 | } 334 | 335 | .ui-menu { 336 | border-radius: .3rem; 337 | left: 15px !important; 338 | right: 15px; 339 | width: auto; 340 | } 341 | 342 | .ui-dialog { 343 | .ui-dialog-content:not(.iframe) { 344 | padding: .65rem; 345 | } 346 | } 347 | 348 | .ui-autocomplete { 349 | // TODO: e.g. time input autocompletion on mobile 350 | } 351 | } 352 | -------------------------------------------------------------------------------- /styles/widgets/mail.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Mail message body elements ***/ 13 | 14 | 15 | @mail-header-photo-height: 4rem; 16 | 17 | 18 | #message-header { 19 | margin-bottom: 1rem; 20 | 21 | .subject { 22 | .overflow-ellipsis; 23 | font-size: 1.5rem; 24 | font-weight: bold; 25 | white-space: nowrap; 26 | } 27 | 28 | .short-header { 29 | display: flex; 30 | 31 | img.contactphoto { 32 | margin: 0 1rem 0 0; 33 | border-radius: 50%; 34 | width: @mail-header-photo-height; 35 | height: @mail-header-photo-height; 36 | } 37 | 38 | div.header-content { 39 | min-height: @mail-header-photo-height; 40 | flex: 1; 41 | } 42 | 43 | div.header-subject { 44 | line-height: @mail-header-photo-height/2; 45 | 46 | & > span { 47 | line-height: 1.5; 48 | display: inline-block; 49 | vertical-align: middle; 50 | } 51 | } 52 | 53 | div.header-links { 54 | a { 55 | font-size: 90%; 56 | margin-right: .5rem; 57 | text-decoration: none; 58 | white-space: nowrap; 59 | line-height: 1.5; 60 | display: inline-block; 61 | 62 | &:before { 63 | &:extend(.font-icon-class); 64 | display: inline-block; 65 | float: none; 66 | } 67 | 68 | &.extwin:before { 69 | content: @fa-var-external-link-square-alt; 70 | } 71 | 72 | &.headers:before { 73 | content: @fa-var-wrench; 74 | } 75 | 76 | &.envelope:before { 77 | .font-icon-regular(@fa-var-envelope); 78 | } 79 | 80 | &.html:before { 81 | content: @fa-var-image; 82 | } 83 | 84 | &.plain:before { 85 | content: @fa-var-align-justify; 86 | } 87 | 88 | &.zipdownload:before { 89 | content: @fa-var-download; 90 | } 91 | } 92 | } 93 | 94 | .message-partheaders { 95 | margin: 0 !important; 96 | padding: .25rem 0 !important; 97 | } 98 | } 99 | } 100 | 101 | #message-content { 102 | .attachmentslist:not(:empty) { 103 | margin-bottom: 1rem; 104 | } 105 | } 106 | 107 | #message-objects + .ui.alert { 108 | float: left; 109 | } 110 | 111 | #messagebody { 112 | // TODO 113 | 114 | &.mailvelope { 115 | margin: 0; 116 | } 117 | } 118 | 119 | .message-part, 120 | .message-htmlpart { 121 | padding-top: .5rem; 122 | 123 | &:not(:first-child) { 124 | border-top: 1px solid lighten(@color-mail-headers, 50%); 125 | margin-top: .5rem; 126 | } 127 | 128 | div.rcmBody { 129 | // Remove margins that can be set by the mail message styles 130 | margin: 0 !important; 131 | } 132 | 133 | blockquote { 134 | .overflow-ellipsis; 135 | color: @color-blockquote-0; 136 | border-left: 2px solid @color-blockquote-0-border; 137 | border-right: 2px solid @color-blockquote-0-border; 138 | background-color: @color-blockquote-background; 139 | margin: 2px 0; 140 | padding: 0 .4em; 141 | 142 | blockquote { 143 | color: @color-blockquote-1; 144 | border-left: 2px solid @color-blockquote-1-border; 145 | border-right: 2px solid @color-blockquote-1-border; 146 | 147 | blockquote { 148 | color: @color-blockquote-2; 149 | border-left: 2px solid @color-blockquote-2-border; 150 | border-right: 2px solid @color-blockquote-2-border; 151 | } 152 | } 153 | 154 | span.blockquote-link { 155 | top: 0; 156 | cursor: pointer; 157 | right: .5rem; 158 | min-width: 4rem; 159 | padding: .2rem .25rem .2rem .5rem; 160 | font-size: 90%; 161 | text-align: center; 162 | color: @color-black-shade-text; 163 | background: @color-black-shade-bg; 164 | border: 1px solid @color-black-shade-border; 165 | border-radius: .3rem; 166 | line-height: 1; 167 | .font-family; // don't inherit monospace font 168 | 169 | &:after { 170 | &:extend(.font-icon-class); 171 | content: @fa-var-angle-down; 172 | display: inline-block; 173 | float: none; 174 | margin: 0; 175 | font-size: 90%; 176 | } 177 | 178 | &.collapsed:after { 179 | content: @fa-var-angle-up; 180 | } 181 | } 182 | 183 | &.blockquote-header { 184 | text-overflow: ellipsis !important; 185 | padding-right: 5rem !important; 186 | } 187 | } 188 | } 189 | 190 | .message-part { 191 | span.sig { 192 | color: @color-mail-signature; 193 | } 194 | 195 | div.pre { 196 | font-family: monospace; 197 | } 198 | 199 | &.mailvelope iframe { 200 | min-height: 35em; 201 | } 202 | } 203 | 204 | .message-partheaders { 205 | padding: .5rem 0; 206 | margin: .5rem 0 0 0; 207 | font-size: 90%; 208 | border-top: 1px solid lighten(@color-mail-headers, 50%); 209 | border-bottom: 1px solid lighten(@color-mail-headers, 50%); 210 | color: @color-mail-headers; 211 | 212 | .header-title { 213 | .overflow-ellipsis; 214 | white-space: nowrap; 215 | max-width: 7em; 216 | font-weight: bold; 217 | padding-right: 1rem; 218 | vertical-align: top; 219 | } 220 | 221 | .subject { 222 | font-weight: bold; 223 | } 224 | 225 | & + .message-part, 226 | & + .message-htmlpart { 227 | border-top: 0; 228 | margin: 0; 229 | } 230 | } 231 | 232 | .image-tools { 233 | position: absolute; 234 | top: 5rem; 235 | left: 0; 236 | height: @layout-header-height; 237 | overflow: hidden; 238 | transform: translateX(-87%); 239 | transition: transform 0.3s ease-in-out; 240 | background-color: @color-image-tools-background; 241 | border-radius: 0 .3rem .3rem 0; 242 | 243 | .toolbar { 244 | float: left; 245 | height: @layout-header-height; 246 | 247 | a.button:before { 248 | width: auto; 249 | height: 1.75rem; 250 | display: block; 251 | float: none; 252 | } 253 | } 254 | 255 | a.button.icon.tools { 256 | padding: 0 .25rem; 257 | display: inline-block; 258 | height: @layout-header-height; 259 | 260 | span.inner { 261 | display: none; 262 | } 263 | 264 | &:before { 265 | line-height: @layout-header-height; 266 | margin: 0; 267 | } 268 | } 269 | 270 | &.open { 271 | transform: translateX(0); 272 | 273 | a.button.icon.tools:before { 274 | content: @fa-var-chevron-left; 275 | } 276 | } 277 | 278 | a { 279 | color: @color-image-tools; 280 | 281 | &:focus, 282 | &:hover { 283 | background-color: @color-image-tools-hover !important; 284 | outline: 0; 285 | } 286 | } 287 | } 288 | -------------------------------------------------------------------------------- /styles/widgets/messages.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** UI Messages ***/ 13 | 14 | // .boxwarning/.boxerror/.boxinformation classes are converted to .ui.alert in bootstrap_init() 15 | 16 | .ui.alert { 17 | margin: 0; 18 | opacity: .95; 19 | float: left; 20 | width: 100%; 21 | padding: .75em; 22 | color: @color-message; 23 | border: 1px solid @color-message-border; 24 | background-color: @color-message-background; 25 | display: flex; 26 | align-items: center; 27 | 28 | @media screen and (max-width: @screen-width-xs) { 29 | border: 0; 30 | border-radius: 0; 31 | min-height: 4.2rem; 32 | } 33 | 34 | @media screen and (min-width: (@screen-width-xs + 1px)) { 35 | &:not(:last-child) { 36 | margin-bottom: .2rem; 37 | } 38 | } 39 | 40 | span { 41 | margin: auto 0; 42 | } 43 | 44 | & > i.icon { 45 | line-height: 1; 46 | color: lighten(@color-black, 25%); 47 | margin: auto 0; 48 | } 49 | 50 | & > i.icon:before { 51 | &:extend(.font-icon-class); 52 | content: @fa-var-info-circle; 53 | margin-right: .6rem; 54 | } 55 | 56 | &.loading { 57 | color: @color-message-loading; 58 | 59 | & > i.icon:before { 60 | content: @fa-var-circle-notch; 61 | .animated-icon-class; 62 | width: 1em; 63 | } 64 | } 65 | 66 | &.alert-success > i.icon:before { 67 | content: @fa-var-check-circle; 68 | color: @color-message-success; 69 | } 70 | 71 | &.alert-warning > i.icon:before { 72 | content: @fa-var-exclamation-triangle; 73 | color: @color-message-warning; 74 | } 75 | 76 | &.alert-danger > i.icon:before { 77 | content: @fa-var-exclamation-circle; 78 | color: @color-message-error; 79 | } 80 | 81 | &.vcardattachment > i.icon:before { 82 | content: @fa-var-address-card; // vcard_attachments plugin 83 | } 84 | 85 | &.enigmaattachment > i.icon:before { 86 | content: @fa-var-key; // enigma plugin 87 | } 88 | 89 | &.signed > i.icon:before, 90 | &.encrypted > i.icon:before { 91 | content: @fa-var-lock; // enigma plugin 92 | } 93 | 94 | // This works with following structure: [button]. 95 | // here is a one-line text, and button can be anything but . 96 | &.aligned-buttons { 97 | display: flex; 98 | 99 | span { 100 | flex: 1; 101 | } 102 | } 103 | 104 | a:not(.btn) { 105 | color: @color-message-link; 106 | font-weight: normal; 107 | } 108 | 109 | h3 { 110 | font-weight: bold; 111 | font-size: 1.2rem; 112 | } 113 | 114 | p { 115 | margin: 1rem 0; 116 | } 117 | 118 | &.boxerror, 119 | &.boxconfirmation, 120 | &.boxinformation, 121 | &.boxwarning { 122 | float: none; 123 | border-radius: 0; 124 | border: none; 125 | padding: .5em; 126 | margin-top: 0; // this can be a

element, reset default margin 127 | 128 | i.icon { 129 | font-size: 1.5em !important; 130 | } 131 | 132 | &:not(:last-child) { 133 | margin-bottom: .2rem; 134 | } 135 | } 136 | 137 | &.boxerror { 138 | background-color: @color-message-error-background; 139 | } 140 | 141 | &.boxinformation { 142 | background-color: @color-message-background; 143 | } 144 | 145 | &.boxconfirmation { 146 | background-color: @color-message-success-background; 147 | } 148 | 149 | &.boxwarning { 150 | background-color: @color-message-warning-background; 151 | } 152 | 153 | & + table { 154 | margin-top: 1em; 155 | } 156 | } 157 | 158 | #messagestack { 159 | position: absolute; 160 | bottom: .5em; 161 | right: .7em; 162 | z-index: 102; // needs to be above .ui-widget-overlay 163 | width: 320px; 164 | height: auto; 165 | max-height: 85%; 166 | 167 | @media screen and (max-width: @screen-width-xs) { 168 | left: 0; 169 | right: 0; 170 | bottom: 0; 171 | width: auto; 172 | } 173 | 174 | div { 175 | border-color: transparent; 176 | 177 | &.voice { 178 | position: absolute; 179 | top: -1000px; 180 | } 181 | 182 | i.icon { 183 | font-size: 1.5em !important; 184 | } 185 | } 186 | 187 | .loading { 188 | background-color: @color-list-selected-background; 189 | border-color: @color-main; 190 | color: @color-main; 191 | 192 | & > i.icon:before { 193 | color: @color-main; 194 | } 195 | } 196 | 197 | .alert-info.information { 198 | color: #fff; 199 | background-color: @color-message-information; 200 | 201 | & > i.icon:before { 202 | color: #fff; 203 | } 204 | } 205 | 206 | .alert-info.notice { 207 | color: #fff; 208 | background-color: @color-taskmenu-background; 209 | 210 | & > i.icon:before { 211 | color: #fff; 212 | } 213 | } 214 | 215 | .alert-success { 216 | color: #fff; 217 | background-color: @color-message-success; 218 | 219 | & > i.icon:before { 220 | color: #fff; 221 | } 222 | } 223 | 224 | .alert-warning { 225 | background-color: @color-message-warning; 226 | 227 | & > i.icon:before { 228 | color: #fff; 229 | } 230 | } 231 | 232 | .alert-danger { 233 | color: #fff; 234 | background-color: @color-message-error; 235 | 236 | & > i.icon:before { 237 | color: #fff; 238 | } 239 | } 240 | 241 | a { 242 | color: inherit !important; 243 | text-decoration: underline; 244 | cursor: pointer; 245 | } 246 | } 247 | -------------------------------------------------------------------------------- /styles/widgets/searchbar.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Searchbar and searchfilterbar widgets ***/ 13 | 14 | .searchbar { 15 | position: absolute; 16 | background-color: @color-layout-header-background; 17 | right: .25rem; 18 | height: @layout-header-height; 19 | display: block !important; 20 | 21 | a.button { 22 | min-width: auto; 23 | padding: 0; 24 | display: block; 25 | 26 | &:before { 27 | line-height: @layout-header-height; 28 | } 29 | } 30 | 31 | .input-group { 32 | margin-top: calc(@layout-header-height/2 - 2.25rem/2); 33 | display: none; 34 | padding: 0 .5rem; 35 | 36 | .icon:before { 37 | font-size: 1em; 38 | line-height: 1.1; 39 | } 40 | 41 | .icon.filter, 42 | .icon.search { 43 | color: #888; 44 | } 45 | } 46 | 47 | form { 48 | display: none; 49 | } 50 | 51 | a.icon { 52 | &:before { 53 | &:extend(.font-icon-class); 54 | margin: 0; 55 | } 56 | 57 | &.reset:before { 58 | content: @fa-var-trash-alt; 59 | } 60 | &.options:before { 61 | content: @fa-var-angle-down; 62 | } 63 | } 64 | 65 | &.active a.button.search { 66 | color: @color-searchbar-icon-active; 67 | } 68 | 69 | &.open { 70 | z-index: 10; 71 | left: 0 !important; 72 | right: 0 !important; 73 | 74 | .input-group { 75 | display: flex; 76 | } 77 | 78 | form { 79 | display: flex; 80 | } 81 | 82 | a.button.filter, 83 | a.button.search { 84 | display: none; 85 | } 86 | } 87 | } 88 | 89 | .searchfilterbar { 90 | right: @layout-touch-icon-width + .25rem; 91 | 92 | &.active a.button.filter { 93 | color: @color-searchbar-icon-active; 94 | } 95 | } 96 | 97 | html.ie11 { 98 | .searchbar { 99 | a.button.filter:before, 100 | a.button.search:before { 101 | line-height: 3.2; 102 | font-size: 1.25rem; 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /styles/widgets/taskmenu.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Taskmenu ***/ 13 | 14 | #taskmenu { 15 | height: 100%; 16 | 17 | a { 18 | .overflow-ellipsis; 19 | text-decoration: none; 20 | display: block; 21 | 22 | &:before { 23 | &:extend(.font-icon-class); 24 | } 25 | 26 | &.mail:before { 27 | content: @fa-var-envelope; 28 | } 29 | &.addressbook:before { 30 | content: @fa-var-user; 31 | } 32 | &.settings:before { 33 | content: @fa-var-sliders-h; 34 | } 35 | &.help:before { 36 | content: @fa-var-life-ring; 37 | } 38 | &.logout:before { 39 | content: @fa-var-power-off; 40 | } 41 | &.about:before { 42 | content: @fa-var-question; 43 | } 44 | &.refresh:before { 45 | content: @fa-var-sync; 46 | } 47 | &.compose:before { 48 | content: @fa-var-edit; 49 | } 50 | &.calendar:before { 51 | content: @fa-var-calendar-alt; 52 | } 53 | &.tasklist:before { 54 | content: @fa-var-tasks; 55 | } 56 | &.files:before { 57 | content: @fa-var-folder; 58 | } 59 | &.notes:before { 60 | content: @fa-var-sticky-note; 61 | } 62 | } 63 | 64 | a.logout { 65 | color: @color-taskmenu-button-logout-hover !important; 66 | } 67 | 68 | @media screen and (max-width: @screen-width-xs) { 69 | z-index: 30001; // because autocompletion popup uses z-index:30000 70 | overflow-x: hidden; 71 | 72 | a { 73 | width: 100%; 74 | padding: 0 .5em; 75 | text-align: left; 76 | line-height: @layout-touch-menu-record-height; 77 | height: @layout-touch-menu-record-height; 78 | border-bottom: 1px solid @color-list-border; 79 | color: @color-list; 80 | font-size: 1.2rem; 81 | 82 | &:before { 83 | margin-right: .5rem; 84 | } 85 | } 86 | } 87 | 88 | @media screen and (min-width: (@screen-width-xs + 1px)) { 89 | a { 90 | text-align: center; 91 | color: @color-taskmenu-button; 92 | padding: .45rem 0; 93 | width: @layout-menu-width/2; 94 | font-size: 1.2rem; 95 | 96 | &:before { 97 | display: block; 98 | height: 2.1rem; 99 | line-height: 1.5; 100 | width: @layout-menu-width/2; 101 | margin: 0; 102 | } 103 | 104 | &:hover { 105 | color: @color-taskmenu-button; 106 | background: @color-taskmenu-button-background-hover; 107 | } 108 | 109 | &.selected { 110 | color: @color-taskmenu-button-selected; 111 | background: @color-taskmenu-button-selected-background; 112 | } 113 | } 114 | 115 | .special-buttons { 116 | position: absolute; 117 | bottom: 0; 118 | left: 0; 119 | width: @layout-menu-width; 120 | } 121 | 122 | .action-buttons { 123 | a { 124 | color: @color-taskmenu-button-action-background; 125 | background: @color-taskmenu-background; 126 | 127 | &:hover { 128 | color: @color-taskmenu-button-action-hover; 129 | background: @color-taskmenu-button-action-background-hover; 130 | } 131 | } 132 | } 133 | 134 | span.inner { 135 | display: none; 136 | } 137 | } 138 | 139 | @media screen and (min-width: (@screen-width-medium + 1px)) { 140 | a { 141 | width: @layout-menu-width; 142 | height: (@layout-header-height - .05rem); 143 | font-size: 1rem; 144 | 145 | &:before { 146 | width: @layout-menu-width; 147 | height: 1.75rem; 148 | line-height: 1.5; 149 | } 150 | } 151 | 152 | .action-buttons { 153 | a { 154 | color: @color-taskmenu-button-action; 155 | background: @color-taskmenu-button-action-background; 156 | } 157 | } 158 | 159 | span.inner { 160 | display: inline; 161 | font-size: 85%; 162 | padding: 0 .1em; 163 | } 164 | } 165 | } 166 | 167 | .menu { 168 | .popover-header { 169 | @media screen and (min-width: (@screen-width-xs + 1px)) { 170 | display: none !important; 171 | } 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /styles/widgets/toolbar.less: -------------------------------------------------------------------------------- 1 | /** 2 | * Roundcube webmail styles for the Elastic skin 3 | * 4 | * Copyright (c) 2017-2018, The Roundcube Dev Team 5 | * 6 | * The contents are subject to the Creative Commons Attribution-ShareAlike 7 | * License. It is allowed to copy, distribute, transmit and to adapt the work 8 | * by keeping credits to the original authors in the README.md file. 9 | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. 10 | */ 11 | 12 | /*** Toolbar widget ***/ 13 | 14 | .toolbar { 15 | margin: 0; 16 | font-size: 1rem; 17 | 18 | &.listing a, 19 | a { 20 | text-decoration: none; 21 | cursor: pointer !important; // TODO: re-consider .listing class use on toolbar 22 | color: @color-toolbar-button; 23 | } 24 | 25 | a.button { 26 | display: inline-block; 27 | border: 0 !important; 28 | height: @layout-header-height; 29 | min-width: 3.5rem; 30 | max-width: 6rem; 31 | width: auto; // reset width defined for links in .listing 32 | padding: .45rem; 33 | text-align: center; 34 | text-overflow: ellipsis; 35 | overflow-x: hidden; 36 | line-height: 1.5; 37 | 38 | &:hover, 39 | &:focus { 40 | outline: 0; 41 | } 42 | 43 | &.selected { 44 | color: @color-success; 45 | } 46 | 47 | &:before { 48 | &:extend(.font-icon-class); 49 | display: inline; 50 | float: none; 51 | margin: 0; 52 | line-height: 1.75; 53 | } 54 | 55 | &.reply:before { 56 | content: @fa-var-reply; 57 | } 58 | &.reply-all:before { 59 | content: @fa-var-reply-all; 60 | } 61 | &.forward:before { 62 | content: @fa-var-share; 63 | } 64 | &.delete:before { 65 | content: @fa-var-trash-alt; 66 | } 67 | &.markmessage:before { 68 | content: @fa-var-tag; 69 | } 70 | &.more:before { 71 | content: @fa-var-ellipsis-h; 72 | } 73 | &.dropdown:before { 74 | content: @fa-var-caret-down; 75 | } 76 | &.settings:before { 77 | content: @fa-var-sliders-h; 78 | } 79 | &.create:before { 80 | content: @fa-var-plus-square; 81 | } 82 | &.move:before { 83 | content: @fa-var-arrows-alt; 84 | } 85 | &.purge:before { 86 | content: @fa-var-eraser; 87 | } 88 | &.print:before { 89 | content: @fa-var-print; 90 | } 91 | &.search:before { 92 | content: @fa-var-search; 93 | } 94 | &.upload:before, 95 | &.import:before { 96 | content: @fa-var-upload; 97 | } 98 | &.download:before, 99 | &.export:before { 100 | content: @fa-var-download; 101 | } 102 | &.compose:before { 103 | content: @fa-var-edit; 104 | } 105 | &.archive:before { 106 | content: @fa-var-archive; 107 | } 108 | &.junk:before { 109 | content: @fa-var-fire; 110 | } 111 | &.enigma:before, 112 | &.encrypt:before { 113 | content: @fa-var-lock; 114 | } 115 | &.firstpage:before { 116 | content: @fa-var-fast-backward; 117 | } 118 | &.prev:before { 119 | content: @fa-var-arrow-left; 120 | } 121 | &.next:before { 122 | content: @fa-var-arrow-right; 123 | } 124 | &.prevpage:before { 125 | content: @fa-var-backward; 126 | } 127 | &.nextpage:before { 128 | content: @fa-var-forward; 129 | } 130 | &.lastpage:before { 131 | content: @fa-var-fast-forward; 132 | } 133 | &.send:before { 134 | content: @fa-var-paper-plane; 135 | } 136 | &.back:before { 137 | content: @fa-var-arrow-left; 138 | } 139 | &.closewin:before { 140 | content: @fa-var-window-close; 141 | } 142 | &.save:before { 143 | .font-icon-regular(@fa-var-save); 144 | } 145 | &.vcard:before, 146 | &.attach:before { 147 | content: @fa-var-paperclip; 148 | } 149 | &.spellcheck:before { 150 | content: @fa-var-magic; // TODO 151 | } 152 | &.signature:before { 153 | content: @fa-var-id-card; 154 | } 155 | &.responses:before { 156 | content: @fa-var-comment; 157 | } 158 | &.select:before { 159 | .font-icon-regular(@fa-var-check-square); 160 | } 161 | &.threads:before { 162 | content: @fa-var-comments; 163 | } 164 | &.actions:before { 165 | content: @fa-var-cog; 166 | } 167 | &.refresh:before { 168 | content: @fa-var-sync; 169 | } 170 | &.addto:before { 171 | content: @fa-var-user-plus; 172 | } 173 | &.addcc:before { 174 | content: @fa-var-user-plus; 175 | } 176 | &.addbcc:before { 177 | content: @fa-var-user-plus; 178 | } 179 | &.addressbook:before { 180 | content: @fa-var-user; 181 | } 182 | &.expand:before { 183 | content: @fa-var-caret-down; 184 | } 185 | &.collapse:before { 186 | content: @fa-var-caret-up; 187 | } 188 | &.submit:before { 189 | content: @fa-var-check; 190 | } 191 | &.edit:before { 192 | content: @fa-var-pencil-alt; 193 | } 194 | &.qrcode:before { 195 | content: @fa-var-qrcode; 196 | } 197 | &.properties:before { 198 | content: @fa-var-file; 199 | } 200 | &.zoomin:before { 201 | content: @fa-var-search-plus; 202 | } 203 | &.zoomout:before { 204 | content: @fa-var-search-minus; 205 | } 206 | &.rotate:before { 207 | content: @fa-var-redo-alt; 208 | } 209 | } 210 | 211 | &:not(.popupmenu) span.inner { 212 | font-size: 90%; 213 | font-weight: normal; 214 | } 215 | 216 | .dropbutton { 217 | a.button.dropdown { 218 | font-size: 75%; 219 | overflow: hidden; // for IE11 220 | 221 | span.inner { 222 | display: none; 223 | } 224 | } 225 | 226 | a.button:first-child { 227 | padding-right: 0; 228 | } 229 | } 230 | 231 | & > .spacer { 232 | width: 1em; 233 | } 234 | 235 | &.pagenav { 236 | text-align: center; 237 | display: flex; 238 | border-bottom: 1px solid @color-layout-border; 239 | height: @layout-pagenav-height; 240 | overflow: hidden; 241 | 242 | a.button { 243 | flex-grow: 1; 244 | font-size: 80%; 245 | min-width: 2rem !important; 246 | height: @layout-pagenav-height !important; 247 | color: @color-list-pagenav; 248 | overflow: hidden; 249 | 250 | &:before { 251 | line-height: 1 !important; 252 | } 253 | } 254 | 255 | .pagenav-text { 256 | .overflow-ellipsis; 257 | flex-grow: 4; 258 | line-height: @layout-pagenav-height; 259 | font-size: 80%; 260 | color: @color-list-pagenav; 261 | white-space: nowrap; 262 | } 263 | 264 | input { 265 | width: 3rem; 266 | font-size: 90%; 267 | line-height: 1; 268 | padding: .25rem; 269 | margin: .15rem; 270 | display: inline; 271 | text-align: center; 272 | } 273 | 274 | span.inner { 275 | display: none; 276 | } 277 | 278 | &.pagenav-list { 279 | cursor: pointer; 280 | 281 | a.button { 282 | flex-grow: initial; 283 | } 284 | .pagenav-text { 285 | text-align: left; 286 | } 287 | } 288 | } 289 | 290 | &.footer { 291 | a.button:before { 292 | height: 1.75rem; 293 | float: none; 294 | display: block; 295 | width: auto; 296 | } 297 | } 298 | 299 | &.content-frame-navigation.hide-nav-buttons { 300 | a.next, 301 | a.prev { 302 | display: none; 303 | } 304 | } 305 | 306 | .listselectors { 307 | max-width: 100%; 308 | display: flex; 309 | justify-content: space-around; 310 | } 311 | } 312 | 313 | 314 | .header { 315 | a.button { 316 | color: @color-font; 317 | } 318 | 319 | .buttons { 320 | display: block; 321 | 322 | button { 323 | display: block; 324 | float: left; 325 | cursor: pointer; 326 | color: @color-toolbar-button; 327 | background-color: transparent; 328 | border: 0; 329 | padding: 0; 330 | height: @layout-touch-header-height; 331 | line-height: @layout-touch-header-height; 332 | width: 2.5em; 333 | 334 | &:before { 335 | font-size: 1.75rem; 336 | } 337 | } 338 | 339 | a.button { 340 | display: inline-block; 341 | 342 | &:before { 343 | &:extend(.font-icon-class); 344 | float: none; 345 | } 346 | 347 | &.reply:before { 348 | content: @fa-var-reply; 349 | } 350 | 351 | &.send:before { 352 | content: @fa-var-paper-plane; 353 | } 354 | } 355 | } 356 | } 357 | 358 | .popupmenu.toolbar.listing { 359 | a.button { 360 | max-width: 100%; 361 | width: 100%; 362 | text-align: left; 363 | line-height: @layout-touch-menu-record-height; 364 | height: @layout-touch-menu-record-height; 365 | 366 | &:before { 367 | display: inline-block; 368 | line-height: inherit; 369 | margin-right: .5rem; 370 | } 371 | } 372 | 373 | .dropbutton { 374 | display: flex; 375 | 376 | a.button:first-child { 377 | .overflow-ellipsis; 378 | flex: 1; 379 | } 380 | 381 | a.button.dropdown { 382 | font-size: 100%; 383 | cursor: pointer; 384 | width: auto; 385 | 386 | &:before { 387 | content: @fa-var-angle-right; 388 | margin-left: .5em; 389 | margin-right: 0; 390 | } 391 | 392 | span.inner { 393 | display: none; 394 | } 395 | } 396 | } 397 | 398 | li.spacer { 399 | display: none; 400 | } 401 | 402 | li:last-child { 403 | border: 0; 404 | } 405 | } 406 | 407 | 408 | .toolbarmenu li { 409 | &.separator { 410 | // TODO: all separator properties 411 | line-height: 1.5rem !important; 412 | font-size: .75rem !important; 413 | padding: 0 .5rem; 414 | color: @color-popover-separator; 415 | background-color: @color-popover-separator-background; 416 | 417 | label { 418 | margin: 0; // Unsets Bootstrap label margin, bug? 419 | } 420 | } 421 | 422 | &.checkbox > label { 423 | margin: 0; 424 | width: 100%; 425 | 426 | input.icon-checkbox { 427 | right: auto; 428 | 429 | & + label { 430 | left: 0; 431 | margin: 0 .2em 0 .35em; 432 | font-size: 1.1rem; 433 | } 434 | } 435 | } 436 | 437 | a { 438 | opacity: .5; 439 | 440 | &.active { 441 | opacity: 1; 442 | } 443 | } 444 | 445 | &:last-child { 446 | border-bottom: none; 447 | } 448 | 449 | a:before { 450 | &:extend(.font-icon-class); 451 | } 452 | 453 | a.print:before { 454 | content: @fa-var-print; 455 | } 456 | a.copy:before { 457 | content: @fa-var-copy; 458 | } 459 | a.move:before { 460 | content: @fa-var-arrows-alt; 461 | } 462 | a.purge:before { 463 | content: @fa-var-eraser; 464 | } 465 | a.source:before { 466 | content: @fa-var-file-code; 467 | } 468 | a.download:before { 469 | content: @fa-var-download; 470 | } 471 | a.extwin:before { 472 | content: @fa-var-external-link-square-alt; 473 | } 474 | a.create:before { 475 | content: @fa-var-plus-square; 476 | } 477 | a.edit:before { 478 | content: @fa-var-edit; 479 | } 480 | a.edit.asnew:before { 481 | content: @fa-var-pencil-alt; 482 | } 483 | a.rename:before { 484 | content: @fa-var-pencil-alt; 485 | } 486 | a.read:before { 487 | .font-icon-regular(@fa-var-star); 488 | } 489 | a.unread:before { 490 | content: @fa-var-star; 491 | } 492 | a.flag:before { 493 | content: @fa-var-flag; 494 | } 495 | a.unflag:before { 496 | .font-icon-regular(@fa-var-flag); 497 | } 498 | a.filterlink:before { 499 | content: @fa-var-filter; 500 | } 501 | a.reply.list:before, 502 | a.reply.all:before { 503 | content: @fa-var-reply-all; 504 | } 505 | a.forward:before, 506 | a.forward.bounce:before, 507 | a.forward.attachment:before, 508 | a.forward.inline:before { 509 | content: @fa-var-share; 510 | } 511 | a.download.mbox:before, 512 | a.download.eml:before, 513 | a.download.maildir:before { 514 | content: @fa-var-download; 515 | } 516 | a.export.selection:before, 517 | a.export.all:before { 518 | content: @fa-var-download; 519 | } 520 | a.select.all:before { 521 | .font-icon-regular(@fa-var-check-square); 522 | } 523 | a.select.none:before { 524 | content: @fa-var-times; 525 | } 526 | a.select.page:before { 527 | content: @fa-var-bars; 528 | } 529 | a.select.flagged:before { 530 | content: @fa-var-flag; 531 | } 532 | a.select.unread:before { 533 | content: @fa-var-star; 534 | } 535 | a.select.invert:before { 536 | .font-icon-regular(@fa-var-square); 537 | } 538 | a.expand.all:before, 539 | a.expand.unread:before, 540 | a.expand.none:before { 541 | content: @fa-var-comments; 542 | } 543 | a.search:before { 544 | content: @fa-var-search; 545 | } 546 | a.delete:before { 547 | content: @fa-var-trash-alt; 548 | } 549 | a.expunge:before { 550 | content: @fa-var-compress; 551 | } 552 | a.import:before { 553 | content: @fa-var-upload; 554 | } 555 | a.settings:before { 556 | content: @fa-var-sliders-h; 557 | } 558 | a.insertresponse:before { 559 | content: @fa-var-comment; 560 | } 561 | a.compose:before { 562 | content: @fa-var-edit; 563 | } 564 | a.addressbook:before { 565 | content: @fa-var-user; 566 | } 567 | a.recipient:before { 568 | .font-icon-regular(@fa-var-envelope); 569 | } 570 | a.status:before { 571 | .font-icon-regular(@fa-var-lightbulb); 572 | } 573 | a.folders:before { 574 | content: @fa-var-folder; 575 | } 576 | a.remove:before { 577 | content: @fa-var-eraser; 578 | } 579 | a.showurl:before { 580 | content: @fa-var-link; 581 | } 582 | a.qrcode:before { 583 | content: @fa-var-qrcode; 584 | } 585 | a.assigngroup:before { 586 | content: @fa-var-user-plus; 587 | } 588 | a.removegroup:before { 589 | content: @fa-var-user-times; 590 | } 591 | a.vcard:before { 592 | content: @fa-var-paperclip; 593 | } 594 | a.encrypt:before { 595 | content: @fa-var-lock; 596 | } 597 | a.encrypt.sign:before { 598 | content: @fa-var-lock; // TODO 599 | } 600 | } 601 | 602 | .toolbarmenu.listing li { 603 | &.checkbox > label { 604 | padding: 0 .5rem 0 2.5em; 605 | } 606 | 607 | &:hover { 608 | &.checkbox > label, 609 | input.icon-checkbox + label:before, 610 | a.active { 611 | color: @color-toolbarmenu-hover; 612 | background-color: @color-toolbarmenu-hover-background; 613 | } 614 | } 615 | } 616 | 617 | #layout > .sidebar > .header, 618 | #layout > .list > .header { 619 | span.inner { 620 | display: none; 621 | } 622 | } 623 | 624 | #layout > .content > * > .toolbar { 625 | text-align: center; 626 | } 627 | 628 | html.touch { 629 | .toolbarmenu.listing td, 630 | .toolbarmenu.listing li, 631 | #layout > :not(.content) > .header a.button { 632 | font-size: 1.2rem; 633 | } 634 | 635 | .toolbarmenu.listing li { 636 | &.checkbox > label { 637 | padding: 0 .5rem 0 2.75rem; 638 | } 639 | } 640 | 641 | .toolbarmenu li { 642 | input.icon-checkbox + label { 643 | font-size: 1.3rem; 644 | } 645 | } 646 | } 647 | 648 | html.ie11 .toolbar .dropbutton a.dropdown:before { 649 | font-size: 80%; 650 | } 651 | 652 | @media screen and (min-width: (@screen-width-small + 1px)) { 653 | ul.toolbar { 654 | flex: 1; 655 | } 656 | 657 | .toolbar { 658 | a.button { 659 | &:not(.disabled):focus, 660 | &:not(.disabled):hover { 661 | background-color: @color-toolbar-button-background-hover; 662 | } 663 | } 664 | 665 | &.listing li { 666 | display: inline-block; 667 | border: 0; 668 | 669 | a.button:before { 670 | height: 1.75rem; 671 | float: none; 672 | display: block; 673 | width: auto; 674 | margin: 0; 675 | } 676 | } 677 | 678 | .dropbutton { 679 | height: @layout-header-height; 680 | display: inline-block; 681 | 682 | &:hover { 683 | background-color: @color-toolbar-button-background-hover; 684 | } 685 | 686 | a.button.dropdown { 687 | min-width: 1.1rem; 688 | padding: 0 .3rem; 689 | 690 | &:hover { 691 | background-color: darken(@color-toolbar-button-background-hover, 5%); 692 | } 693 | 694 | &:before { 695 | height: @layout-header-height; 696 | line-height: 4.2; 697 | } 698 | } 699 | } 700 | } 701 | 702 | .toolbar.content-frame-navigation { 703 | display: none !important; 704 | } 705 | 706 | .header a.button.icon { 707 | &:not(.disabled):focus, 708 | &:not(.disabled):hover { 709 | background-color: @color-toolbar-button-background-hover; 710 | outline: 0; 711 | } 712 | 713 | &:before { 714 | margin: 0; 715 | } 716 | } 717 | } 718 | 719 | @media screen and (max-width: @screen-width-small) { 720 | body > #layout > div > .toolbar.footer { 721 | justify-content: space-around; 722 | 723 | & > * { 724 | flex-grow: 1; 725 | } 726 | 727 | .buttons { 728 | display: flex; 729 | justify-content: space-around; 730 | } 731 | 732 | .listselectors > * { 733 | flex-grow: 1; 734 | } 735 | } 736 | } 737 | -------------------------------------------------------------------------------- /templates/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 | 6 | 7 |
8 |

Roundcube Webmail

9 | 10 |

This program is free software; 11 | you can redistribute it and/or modify it under the terms of the 12 | GNU General Public License 13 | as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
14 | Some exceptions for skins & plugins apply. 15 |

16 |
17 |

18 | 19 |
20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /templates/addressbook.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

5 | 6 | 7 | 24 | 25 | 26 |
27 |
28 | 29 | 30 | 31 | 33 | 34 |
35 | 36 |
37 |

38 | 41 |
42 |
43 | 44 | 45 |
46 |

47 | 87 |

88 |
89 | 91 |
92 |
93 | 94 | 95 |
96 |

97 | 101 |
102 | 103 |
104 |

105 | 112 |
113 | 114 |
115 |

116 | 123 |
124 |
125 | 126 |
127 |

128 | 132 |
133 | 134 |
135 |

136 | 150 |
151 | 152 | 153 | -------------------------------------------------------------------------------- /templates/bounce.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 | 7 |
8 |

9 |
10 |
11 | 12 |
13 |
14 | 15 | 16 | " tabindex="1"> 17 |
18 |
19 |
20 |
21 | 22 |
23 |
24 | 25 | 26 | " tabindex="1"> 27 | 28 |
29 |
30 |
31 | 42 | 53 |
54 | 55 |
56 | 57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 |
66 |

67 | 71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /templates/compose.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

9 | 10 | 11 | 35 | 36 | 37 |
38 |
39 | 40 | 41 |
42 |
43 | 44 |
45 |

46 | 47 |
48 | 49 |
50 | 51 |
52 |
53 | 54 | 55 |
56 | 57 |
58 | 59 |
60 |
61 | 62 |
63 | 64 |
65 | 66 |
67 |
68 | 69 |
70 | 71 |
72 | 73 |
74 |
75 | 76 | 77 | 78 | 84 | 85 |
86 |
87 |

88 |
89 | 90 | 91 |
92 | 93 | 94 |
95 |
96 |
97 | 98 |
99 |

100 |
101 | 102 | 103 | 104 | 149 |
150 |
151 | 152 | 153 |
154 |

155 |
156 |
157 | 158 |
159 |
160 | 161 | 162 | " tabindex="1"> 163 | 164 |
165 |
166 |
167 |
168 | 169 |
170 |
171 | 172 | 173 | " tabindex="1"> 174 | 175 |
176 |
177 |
178 | 189 | 200 | 211 | 222 |
223 | 224 |
225 | 226 |
227 |
228 |
229 |
230 | 231 |
232 | 233 | 234 |
235 | 236 |
237 | 238 |
239 |
240 |
241 | 242 | 243 | 244 |
245 | 246 |
247 |

248 | 254 |
255 | 256 |
257 |

258 | 265 |
266 | 267 |
268 |

269 | 275 |
276 | 277 |
278 | 282 |
283 | 284 | 285 | -------------------------------------------------------------------------------- /templates/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 |
7 |
8 | 10 |
11 | 12 |
13 |
14 | 16 |
17 |
18 | 19 |
20 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /templates/contactedit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 | 6 |
7 |
8 | 9 | 10 | 11 | 12 | 13 |
14 | 16 |
17 |
18 | 20 |
21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /templates/contactimport.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

:

4 | 5 |
6 | 7 |
8 | 9 | 10 | -------------------------------------------------------------------------------- /templates/contactprint.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /templates/contactsearch.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

:

4 | 5 |
6 | 7 |
8 | 9 | 10 | -------------------------------------------------------------------------------- /templates/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |
6 | 7 | 8 | -------------------------------------------------------------------------------- /templates/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 |
7 | 8 |
9 |
10 | 11 |
12 |
13 | 14 | 15 | $__page_content 16 | 17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /templates/folderedit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/folders.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

6 | 7 | 8 |
9 |
10 | 11 | 12 | 14 | 15 |
16 |
17 | 20 |
21 | 29 |
30 | 31 | 32 |
33 |

34 | 50 |
51 | 52 |
53 |
54 | 55 |
56 | 57 |
58 | 59 | 60 | -------------------------------------------------------------------------------- /templates/identities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

:

6 | 7 | 8 |
9 |
10 | 11 | 12 | 13 |
14 |
15 | 18 |
19 | 20 |
21 | 22 | 23 |
24 |

25 | 40 |
41 | 42 |
43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /templates/identityedit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/includes/footer.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /templates/includes/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | <roundcube:object name="pagetitle" /> 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | "> 32 | 33 |
layout"> 34 | 35 | -------------------------------------------------------------------------------- /templates/includes/mail-menu.html: -------------------------------------------------------------------------------- 1 | 2 | 39 | 40 |
41 |

42 | 48 |
49 | 50 |
51 |

52 | 57 |
58 | 59 |
60 |

61 | 74 |
75 | 76 |
77 |

78 | 85 |
86 | -------------------------------------------------------------------------------- /templates/includes/menu.html: -------------------------------------------------------------------------------- 1 | 27 | -------------------------------------------------------------------------------- /templates/includes/pagenav.html: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /templates/includes/settings-menu.html: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 | 7 | 8 | 16 | 17 |
18 | 19 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /templates/mail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

5 | 6 | 7 | 27 | 28 | 29 |
30 |
31 | 32 | 33 | 34 |
40 | 41 |
42 |

43 | 48 |
49 | 60 |
61 | 62 | 63 |
64 |

65 | 70 |

71 |
72 | 78 |
79 |
80 | 81 | 82 |
83 |

84 | 99 |
100 |
101 | 102 |
103 |

104 | 108 |
109 | 110 |
111 |

112 | 119 |
120 | 121 |
122 |

123 | 131 |
132 | 133 |
134 |

135 | 140 |
141 | 142 | 186 | 187 | 188 | 189 | 190 | -------------------------------------------------------------------------------- /templates/message.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

7 | 8 |
9 | 10 |

11 | 16 | 17 |
18 |
19 |

20 | 21 | : 22 | 23 | 24 |

25 |
26 | 27 |
28 | 29 | 32 | 49 |
50 |
51 |
52 |
53 |
54 |

55 | 56 |
57 |
58 |

59 | 60 | 61 |
62 |
63 |
64 |
65 | 66 | 67 |
68 |

69 | 74 |
75 | 76 |
77 |

78 | 83 |
84 | 85 | 86 | -------------------------------------------------------------------------------- /templates/messageerror.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

5 | 6 |
7 | 8 |

9 | 12 | 13 |
14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /templates/messagepart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 | 13 | 14 |
15 |

16 | 66 |

67 |
68 | 70 |
71 |
72 | 73 | 74 |
75 |

76 | 81 |
82 | 83 |
84 |

85 | 90 |
91 | 92 |
93 |

94 | 99 |
100 | 101 | 102 | 103 |
104 |

105 | 116 | " data-label-hide="" title=""> 118 | 119 | 120 |
121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /templates/messageprint.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /templates/plugin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 |
7 | 8 | 9 |
10 | 11 |
12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /templates/responseedit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /templates/responses.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

6 | 7 | 8 |
9 |
10 | 11 | 12 | 13 |
14 |
15 | 18 |
19 | 20 |
21 | 22 | 23 |
24 |

25 | 38 |
39 | 40 |
41 |
42 | 43 | 44 | -------------------------------------------------------------------------------- /templates/settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

6 | 7 |
" aria-labelledby="aria-label-prefsection"> 8 |
9 | 10 | 11 | 12 |
13 |
14 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 23 |
24 |
25 | 26 |
27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /templates/settingsedit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |
6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roundcube/elastic/db76039f8fc17931e632705b0e0063f18a127043/thumbnail.png -------------------------------------------------------------------------------- /watermark.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | --------------------------------------------------------------------------------