//====================================================
// Theme Variables
//====================================================
// Default
@sidebar: #313042;
@accent: #F18260;
// Luna
// @sidebar: #202C46;
// @accent: #39DFF8;
// Zond
// @sidebar: #333333;
// @accent: #F6D49C;
// Gemini
// @sidebar: #00203C;
// @accent: #F6B312;
// Mercury
// @sidebar: #555;
// @accent: #999;
// Apollo
// @sidebar: #3A1E15;
// @accent: #F6AA1C;
@threadlist-bg: #FFFFFF;
@messagelist-bg: tint(@sidebar, 95%);
@active-thread-text: @sidebar;
@sidebar-text: desaturate(lighten(@sidebar, 40%), 75%);
@active-sidebar-text: #FFFFFF;
@border-color: fade(@sidebar, 10%);
@danger: #FF5F56;
@minimize: #FBD852;
@maximize: #8DD07D;
@swipe-archive: #8DD07D;
@swipe-snooze: #FBD852;
@swipe-trash: @danger;
@invalid: @danger;
@sidebar-margin: 15px;
//====================================================
// Main Sidebar
//====================================================
// Make sidebar and corresponding toolbar match
.column-RootSidebar,
.account-sidebar,
.toolbar-RootSidebar {
height: 100%;
background-color: @sidebar;
// If NOT Retina display, subpixel-antialias fonts instead
@media
not screen and (-webkit-min-device-pixel-ratio: 1.3),
not screen and (-o-min-device-pixel-ratio: 13/10),
not screen and (min-resolution: 120dpi) {
-webkit-font-smoothing: subpixel-antialiased !important;
}
}
// Refactored this to make sure all items
// in sidebar always align left with each other
.account-sidebar {
// make absolute elements (like compose button)
// relate to the sidear, not the column
position: relative;
margin: @sidebar-margin;
}
.nylas-outline-view {
margin-bottom: @sidebar-margin;
}
//====================================================
// Window Controls
//====================================================
.toolbar-window-controls {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0;
min-width: 50px;
width: 50px;
}
.toolbar-window-controls button {
background-color: @sidebar-text;
background-image: none !important;
float: none;
opacity: 0.5;
margin: 0;
transform: scaleY(0.5);
border-radius: 2px;
transition-duration: 150ms;
transition-property: border-radius, opacity, transform;
}
.toolbar-window-controls:hover button {
opacity: 1;
border-radius: 50%;
transform: scaleY(1);
}
.toolbar-window-controls .close {
background-color: @danger;
}
.toolbar-window-controls .minimize {
background-color: @minimize;
}
.toolbar-window-controls .maximize {
background-color: @maximize;
}
.is-blurred {
.toolbar-window-controls .close,
.toolbar-window-controls .minimize,
.toolbar-window-controls .maximize {
background-color: fade(@sidebar-text, 50%);
}
}
// Compose Button Overrides
.sheet-toolbar .btn.btn-toolbar.item-compose {
background: transparent;
box-shadow: none;
opacity: 0.5;
padding: 0;
margin: 0;
height: 100%;
transition: opacity 200ms;
&:hover {
opacity: 1;
}
}
// Compose button icon color
.sheet-toolbar .btn.btn-toolbar.item-compose img.content-mask {
background-color: @sidebar-text;
}
//====================================================
// Sidebar Items
//====================================================
// Section headers
.account-sidebar .heading {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 2px;
color: fade(@sidebar-text, 50%);
margin-bottom: 10px;
padding: 0;
}
// Down arrow icon
.account-switcher {
height: 14px;
width: 16px;
top: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
opacity: 0.5;
transition: opacity 200ms;
&:hover {
opacity: 1;
}
}
// Down arrow icon
.account-switcher img {
zoom: 1 !important;
max-width: 10px;
max-height: 6px;
transform: none;
background-image: none;
background-color: @sidebar-text;
-webkit-mask-repeat: no-repeat;
-webkit-mask-image: url('data:image/svg+xml;utf8,');
}
.account-sidebar .item,
.account-sidebar .item.selected {
color: @sidebar-text;
font-size: 13px;
font-weight: 400;
padding-right: 0;
}
.account-sidebar .item.selected {
background: transparent;
color: @active-sidebar-text;
}
// Item expansion icon wrapper
.disclosure-triangle {
display: flex;
align-items: center;
padding: 0;
width: 15px;
}
// Item expansion icon
.disclosure-triangle div {
border-left-color: fade(@sidebar-text, 50%);
border-top-width: 3px;
border-bottom-width: 3px;
border-left-width: 5px;
transform-origin: 2px;
}
//====================================================
// Sidebar Icons
//====================================================
.account-sidebar .item img.content-mask,
.account-sidebar .add-item-button img, {
background-color: @sidebar-text;
}
.account-sidebar .item.selected img.content-mask {
background-color: @active-sidebar-text;
}
.nylas-outline-view .item-container.dropping {
background: transparent;
}
.nylas-outline-view .item-container.dropping .item {
color: @accent;
}
.nylas-outline-view .item-container.dropping .item img.content-mask {
background-color: @accent;
}
.nylas-outline-view .heading .add-item-button img {
background: fade(@sidebar-text, 50%);
}
//====================================================
// Sidebar Count Badges
//====================================================
.nylas-outline-view .item .item-count-box.alt-count {
background: @accent;
color: @sidebar;
}
.nylas-outline-view .item .item-count-box {
color: @accent;
box-shadow: inset 0 0 0 1px fade(@accent, 50%);
}
//====================================================
// Scrollbar Base & Sidebar Scrollbar
//====================================================
.scrollbar-track {
background: transparent;
border-left: none;
width: 10px;
}
// transitioning background instead of opacity
// so the location tooltip isn't affected
.scrollbar-track .scrollbar-handle {
background: fade(@sidebar, 20%);
border: none !important;
cursor: -webkit-grab;
transition: background 300ms;
}
.scrollbar-track.dragging .scrollbar-handle {
background: fade(@sidebar, 50%);
cursor: -webkit-grabbing;
}
@keyframes slideInRight {
from { opacity: 0; transform: translateX(-50px); }
to { opacity: 1; transform: translateX(-15px); }
}
.scrollbar-track .scrollbar-handle .tooltip .scroll-tooltip {
transform-origin: center right;
animation: slideInRight 300ms;
}
.flexbox-handle-horizontal div {
box-shadow: none;
}
// Removing overlap of scrollbar and handle
.column-ThreadList .flexbox-handle-horizontal.flexbox-handle-right {
right: -8px;
padding: 0;
}
// we now offset the margin on scrollbar
// in sidebar since it's position: relative
.account-sidebar .scrollbar-track {
margin-right: -@sidebar-margin;
}
// and lighten the handle background
.account-sidebar .scrollbar-track .scrollbar-handle {
background: fade(lighten(@sidebar, 50%), 40%);
}
//====================================================
// Thread List
//====================================================
// Make corresponding toolbar match threadlist background
.column-ThreadList,
.toolbar-ThreadList {
height: 100%;
background: @threadlist-bg;
border-bottom: 1px solid @border-color;
}
// jackiehluo -> Hide search bar when buttons appear in list mode
.toolbar-ThreadList .selection-bar .inner {
background: @threadlist-bg;
}
.list-tabular .list-tabular-item {
background-color: @threadlist-bg;
border-bottom: 1px solid @border-color !important;
}
// Using !important so multiple selection actions
.list-tabular .list-tabular-item:hover {
background: tint(@sidebar, 95%) !important;
}
.list-container .list-item.focused,
.list-container .list-item.selected,
.thread-list.handler-split .list-item.selected {
background: tint(@accent, 90%);
color: @active-thread-text;
}
body.is-blurred .list-container .list-item.focused,
body.is-blurred .list-container .list-item.selected,
body.is-blurred .thread-list.handler-split .list-item.selected {
background: tint(@sidebar, 90%);
color: @active-thread-text;
}
.list-tabular .list-tabular-item.keyboard-cursor {
border-left-color: @accent;
background: tint(@accent, 90%);
}
body.is-blurred .list-tabular .list-tabular-item.keyboard-cursor {
border-left-color: tint(@sidebar, 70%);
}
//====================================================
// Inputs, Search & Suggestion Menu
//====================================================
textarea:focus,
input[type="text"]:focus,
input[type="email"]:focus,
.search-bar .menu .header-container input:focus {
border-color: @accent;
box-shadow: 0 0 1.5px @accent;
}
.search-bar {
margin: 7.5px;
width: 100%;
}
.search-container .content-container {
margin-top: 5px !important;
}
.menu .item.selected, .menu .item:active,
.search-container .content-container .item.selected {
background: @accent;
}
//====================================================
// Thread Icons
//====================================================
// Remove inverted color effects
.thread-list .focused .thread-icon,
.draft-list .focused .thread-icon,
.thread-list .focused .draft-icon,
.draft-list .focused .draft-icon,
.thread-list .focused .mail-important-icon,
.draft-list .focused .mail-important-icon,
.thread-list.handler-split .list-item.selected .thread-icon,
.thread-list.handler-split .list-item.selected .draft-icon,
.thread-list.handler-split .list-item.selected .mail-important-icon {
-webkit-filter: none !important;
}
// Base settings for replacing backgrounds with -webkit-filters for easier color changes
.thread-list .thread-icon {
-webkit-mask-repeat: no-repeat;
-webkit-mask-size: 12px;
-webkit-mask-position: center;
}
// Change color of unread dot icon
.thread-list .thread-icon.thread-icon-unread {
background-image: none;
background-color: @accent;
-webkit-mask-image: url(../static/images/thread-list/icon-unread-@2x.png);
}
// replace undread icon with star icon on thread item hover
.thread-list .list-item:hover .thread-icon.thread-icon-unread {
background-color: tint(@sidebar);
-webkit-mask-image: url(../static/images/thread-list/icon-star-@2x.png);
&:hover { background-color: tint(@sidebar, 20%); }
}
// Replace outlined star icon with solid one
.thread-list .thread-icon.thread-icon-star,
.thread-list .thread-icon-star-on-hover:hover {
background-color: tint(@sidebar);
-webkit-mask-image: url(../static/images/thread-list/icon-star-@2x.png);
}
// for Read messages, use the solid star on item hover as well
.thread-list .list-item:hover .thread-icon-none {
background-image: none;
background-color: tint(@sidebar);
-webkit-mask-image: url(../static/images/thread-list/icon-star-@2x.png);
}
// Make the star a bit darker on direct hover
.thread-list .list-item:hover .thread-icon-none:hover {
background-image: none;
background-color: tint(@sidebar, 20%);
-webkit-mask-image: url(../static/images/thread-list/icon-star-@2x.png);
}
.thread-icon.thread-icon-attachment {
opacity: 0.5;
background-size: 12px;
}
// The gradient behind threadlist hover icons (Snooze, Arvhive Delete)
.thread-list .list-item:hover .list-column-HoverActions .inner,
.thread-list .list-item.focused:hover .list-column-HoverActions .inner,
.thread-list .list-item.selected:hover .list-column-HoverActions .inner,
.thread-list.handler-split .list-item.selected:hover .list-column-HoverActions .inner {
background-image: -webkit-linear-gradient(left, fade(@messagelist-bg, 0%) 0%, @messagelist-bg 40%, @messagelist-bg 100%);
}
.thread-list .list-item.focused:hover .list-column-HoverActions .inner .action,
.thread-list.handler-split .list-item.selected:hover .list-column-HoverActions .inner .action {
-webkit-filter: none;
}
.thread-list .list-item.focused:hover .list-column-HoverActions .inner .action.action-trash {
background: url("../static/images/thread-list-quick-actions/ic-quick-button-trash@2x.png") center no-repeat, linear-gradient(to top, rgba(241, 241, 241, 0.75) 0%, rgba(253, 253, 253, 0.75) 100%);
}
//====================================================
// Swiping
//====================================================
.thread-list .swipe-backing.swipe-all,
.thread-list .swipe-backing.swipe-archive,
.draft-list .swipe-backing.swipe-all,
.draft-list .swipe-backing.swipe-archive {
background: @swipe-archive;
&.confirmed {
background: saturate(@swipe-archive, 10%);
}
}
.thread-list .swipe-backing.swipe-snooze,
.draft-list .swipe-backing.swipe-snooze {
background: @swipe-snooze;
&.confirmed {
background: saturate(@swipe-snooze, 10%);
}
}
.thread-list .swipe-backing.swipe-trash,
.draft-list .swipe-backing.swipe-trash {
background: @swipe-trash;
&.confirmed {
background: saturate(@swipe-trash, 10%);
}
}
//====================================================
// Mail Labels
//====================================================
// Make labels white on accent color when message is selected
.thread-list .focused .mail-label, .draft-list .focused .mail-label,
.thread-list.handler-split .list-item.selected .mail-label {
background: @accent !important;
color: white !important;
box-shadow: none !important;
-webkit-filter: none !important;
}
//====================================================
// Message List & Corresponding Toolbar
//====================================================
#message-list {
background: @messagelist-bg;
}
// Make toolbars match panels
.column-MessageList,
.toolbar-MessageList,
.column-MessageListSidebar,
.toolbar-MessageListSidebar {
height: 100%;
background: @messagelist-bg;
border-left: 1px solid @border-color;
}
// Message List top and bottom spacing
#message-list .messages-wrap .scroll-region-content-inner {
padding-top: 20px;
padding-bottom: 40vh;
}
// Reset padding
#message-list .message-header,
#message-list .message-item-wrap.collapsed .message-item-white-wrap,
#message-list .message-item-wrap.collapsed .message-item-area {
padding: 0;
}
// Make padding uniform
#message-list .message-item-area,
#message-list .footer-reply-area-wrap .footer-reply-area {
padding: 20px !important;
}
// Adjusting position of thread participants toggle
#message-list .header-toggle-control {
top: 6px !important;
left: -11px !important;
display: flex !important;
justify-content: center;
align-items: center;
}
// Reducing size and overriding invalid -webkit-mask-repeat- property
#message-list .header-toggle-control img {
zoom: 0.35 !important;
-webkit-mask-repeat: no-repeat !important;
}
.message-participants.to-participants .collapsed-participants,
.message-participants .expanded-participants .participant-type {
margin-top: 0;
}
.message-participants .from-label,
.message-participants .to-label,
.message-participants .cc-label,
.message-participants .bcc-label {
margin-right: 6px;
}
#message-list .message-item-wrap .message-item-white-wrap,
#message-list .minified-bundle .msg-line,
#message-list .minified-bundle .num-messages,
#message-list .footer-reply-area-wrap, {
box-shadow: inset 0 0 0 1px @border-color;
border: none;
}
#message-list .minified-bundle + .message-item-wrap,
#message-list .message-item-wrap.collapsed + .minified-bundle,
#message-list .minified-bundle .num-messages,
#message-list .minified-bundle .msg-lines {
margin-top: 0;
}
// Collapsed Messages Pill Label
#message-list .minified-bundle .num-messages {
padding: 3px;
}
// remove margin for last message before reply
#message-list .message-item-wrap.before-reply-area {
margin-bottom: 0;
}
// Replacing focused state with theme accent
#message-list .message-item-wrap .message-item-white-wrap.composer-outer-wrap.focused {
box-shadow: 0 0 0 1px @accent;
}
// Darken composer action bar to contrast from background
.composer-inner-wrap .composer-action-bar-wrap,
.composer-full-window .composer-inner-wrap .composer-action-bar-wrap {
background: darken(@messagelist-bg, 1%);
box-shadow: none;
border-radius: 0;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
}
// make action bar at bottom of composer a bit darker than background
#message-list .message-item-wrap .message-item-white-wrap.composer-outer-wrap.focused .composer-action-bar-wrap {
background: darken(@messagelist-bg, 1%);
}
//====================================================
// Preferences
//====================================================
.preferences-sidebar,
.preferences-content {
background: @messagelist-bg;
}
.preferences-wrap .preferences-content > .scroll-region-content {
padding-bottom: 100px;
}
//====================================================
// Notifications
//====================================================
.notifications-sticky .notifications-sticky-item {
background-color: @accent;
line-height: 50px;
border: none;
}
.sidebar-activity {
background: darken(@sidebar, 5%);
color: @active-sidebar-text;
box-shadow: none;
}
.sidebar-activity .item {
border: none;
}
//====================================================
// Drafts & Selection List
//====================================================
// Make corresponding toolbar match threadlist background
.draft-list,
.toolbar-DraftList {
background: @messagelist-bg;
}
.draft-list .list-container .list-item.selected,
.draft-list .list-tabular .list-tabular-item.keyboard-cursor {
background: white;
}
.draft-list .list-tabular .list-tabular-item .checkmark .inner {
background-color: white;
border-color: tint(@sidebar, 75%);
}
.list-tabular .list-tabular-item.selected .checkmark .inner {
background-color: @accent;
background-image: url('data:image/svg+xml;utf8,');
background-size: 8px 6px;
}
// Make draft-list items slightly darker on hover
// Using !important so multiple selection actions
.draft-list .list-tabular .list-tabular-item:hover {
background: tint(@sidebar, 90%) !important;
}
// Center vertically regardless of list item height
.draft-list .sending-progress {
align-self: center;
background-color: #f5f5f5;
border: none;
margin-top: 0;
}
//====================================================
// Composer
//====================================================
.tokenizing-field .token.invalid {
border-bottom: 1px solid @invalid;
}
.tokenizing-field .token.selected,
.tokenizing-field .token.dragging {
background: @accent;
box-shadow: none;
border: none;
}
.tokenizing-field .token.invalid.selected,
.tokenizing-field .token.invalid.dragging {
background: @invalid;
}
//====================================================
// Toolbars Bar
//====================================================
.sheet-toolbar {
border: none;
}
.sheet-toolbar-container {
background: transparent;
box-shadow: none;
border: none;
}
.sheet-toolbar .selection-bar .absolute {
left: 0;
right: 0;
border-left: none;
border-right: none;
background: none;
}
// Match left and right alignment across all toolbars
.toolbar-RootSidebar,
.toolbar-MessageList,
.toolbar-MessageListSidebar,
.toolbar-Center,
.toolbar-Preferences {
height: 100%;
padding-left: @sidebar-margin;
padding-right: @sidebar-margin;
}
// Slightly darker toolbar for Prefs, Single Panel Messages, and Popout
.toolbar-Preferences,
.layout-mode-list .toolbar-MessageList,
.sheet-toolbar-container.mode-popout {
background: transparent;
background-color: tint(@sidebar, 90%);
border: none;
}
// jackiehluo -> (themes): Fixes Windows button UI issues in #1649
body.platform-win32 .sheet-toolbar-container .btn-toolbar:hover {
background: none;
}
// Centering vertially without magic numbers
.layout-mode-popout .toolbar-window-controls {
margin-top: 0;
}
.sheet-toolbar .item-container .window-title {
position: static;
// compensate for width of .toolbar-window-controls
transform: translateX(-25px);
}
.sheet-toolbar .btn-toolbar {
box-shadow: 0 0 0 1px @border-color;
}
// Let toolbar define outer padding/margin
.sheet-toolbar .btn-toolbar:only-of-type {
margin-right: 0;
}
.btn-toolbar.mode-toggle.mode-false img.content-mask {
background-color: @accent;
}