#
# Copyright 2019 FormDev Software GmbH
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# This file is loaded for all dark themes (that extend class FlatDarkLaf).
#
# Documentation:
#  - https://www.formdev.com/flatlaf/properties-files/
#  - https://www.formdev.com/flatlaf/how-to-customize/
#
# NOTE: Avoid copying the whole content of this file to own properties files.
#       This will make upgrading to newer FlatLaf versions complex and error-prone.
#       Instead, copy and modify only those properties that you need to alter.
#

# Colors and style mostly based on Darcula theme from IntelliJ IDEA Community Edition,
# which is licensed under the Apache 2.0 license. Copyright 2000-2019 JetBrains s.r.o.
# See: https://github.com/JetBrains/intellij-community/

#---- variables ----

# general background and foreground (text color)
@background = #3c3f41
@foreground = #ddd
@disabledBackground = @background
@disabledForeground = shade(@foreground,25%)

# component background
@buttonBackground = tint(@background,9%)
@componentBackground = tint(@background,5%)
@menuBackground = darken(@background,5%)

# selection
@selectionBackground = @accentSelectionBackground
@selectionForeground = contrast(@selectionBackground, shade(@background), tint(@foreground), 25%)
@selectionInactiveBackground = spin(saturate(shade(@selectionBackground,70%),20%),-15)
@selectionInactiveForeground = @foreground

# menu
@menuSelectionBackground = @selectionBackground
@menuHoverBackground = lighten(@menuBackground,10%,derived)
@menuCheckBackground = darken(@menuSelectionBackground,10%,derived noAutoInverse)
@menuAcceleratorForeground = darken(@foreground,15%)
@menuAcceleratorSelectionForeground = @selectionForeground

# misc
@cellFocusColor = lighten(@selectionBackground,10%)
@icon = shade(@foreground,7%)

# accent colors (blueish)
#   set @accentColor to use single accent color or
#   modify @accentBaseColor to use variations of accent base color
@accentColor = systemColor(accent,null)
@accentBaseColor = #4B6EAF
@accentBase2Color = lighten(saturate(spin(@accentBaseColor,-8),13%),5%)
#   accent color variations
@accentFocusColor               = if(@accentColor, @accentColor, shade(spin(@accentBaseColor,-8),20%))
@accentLinkColor                = if(@accentColor, @accentColor, lighten(saturate(spin(@accentBaseColor,-5),50%),16%))
@accentSelectionBackground      = if(@accentColor, @accentColor, @accentBaseColor)
@accentSliderColor              = if(@accentColor, @accentColor, @accentBase2Color)
@accentUnderlineColor           = if(@accentColor, @accentColor, @accentBase2Color)
@accentButtonDefaultBackground  = if(@accentColor, @accentColor, darken(spin(@accentBaseColor,-8),13%))

# for buttons within components (e.g. combobox or spinner)
@buttonArrowColor = shade(@foreground,17%)
@buttonDisabledArrowColor = darken(@buttonArrowColor,25%)
@buttonHoverArrowColor = lighten(@buttonArrowColor,10%,derived noAutoInverse)
@buttonPressedArrowColor = lighten(@buttonArrowColor,20%,derived noAutoInverse)

# Drop (use lazy colors for IntelliJ platform themes, which usually do not specify these colors)
@dropCellBackground = darken(List.selectionBackground,10%,lazy)
@dropCellForeground = lazy(List.selectionForeground)
@dropLineColor = lighten(List.selectionBackground,10%,lazy)
@dropLineShortColor = lighten(List.selectionBackground,30%,lazy)


#---- system colors ----

activeCaption = #434E60
inactiveCaption = #393C3D
controlHighlight = darken($controlShadow,20%)
controlLtHighlight = darken($controlShadow,25%)
controlDkShadow = lighten($controlShadow,10%)


#---- Button ----

Button.background = @buttonBackground
Button.hoverBackground = lighten($Button.background,3%,derived)
Button.pressedBackground = lighten($Button.background,6%,derived)
Button.selectedBackground = lighten($Button.background,10%,derived)
Button.selectedForeground = $Button.foreground
Button.disabledSelectedBackground = lighten($Button.background,3%,derived)

Button.borderColor = tint($Button.background,10%)
Button.disabledBorderColor = $Button.borderColor
Button.focusedBorderColor = $Component.focusedBorderColor
Button.hoverBorderColor = $Button.focusedBorderColor

Button.innerFocusWidth = 1

Button.default.background = @accentButtonDefaultBackground
Button.default.foreground = contrast($Button.default.background, @background, $Button.foreground, 25%)
Button.default.hoverBackground = lighten($Button.default.background,3%,derived)
Button.default.pressedBackground = lighten($Button.default.background,6%,derived)
Button.default.borderColor = tint($Button.default.background,15%)
Button.default.hoverBorderColor = tint($Button.default.background,18%)
Button.default.focusedBorderColor = $Button.default.hoverBorderColor
Button.default.focusColor = lighten($Component.focusColor,3%)
Button.default.boldText = true

Button.toolbar.hoverBackground = lighten($Button.background,1%,derived)
Button.toolbar.pressedBackground = lighten($Button.background,4%,derived)
Button.toolbar.selectedBackground = lighten($Button.background,7%,derived)


#---- CheckBox ----

CheckBox.icon.focusWidth = 1

# enabled
CheckBox.icon.borderColor = tint($Component.borderColor,5%)
CheckBox.icon.background = tint(@background,5%)
CheckBox.icon.selectedBorderColor = tint($CheckBox.icon.borderColor,20%)
CheckBox.icon.selectedBackground = $CheckBox.icon.background
CheckBox.icon.checkmarkColor = shade(@foreground,10%)

# disabled
CheckBox.icon.disabledBorderColor = shade($CheckBox.icon.borderColor,20%)
CheckBox.icon.disabledBackground = @disabledBackground
CheckBox.icon.disabledCheckmarkColor = darken($CheckBox.icon.checkmarkColor,25%)

# focused
CheckBox.icon.focusedBorderColor = $Component.focusedBorderColor
CheckBox.icon.focusedBackground = fade($CheckBox.icon.focusedBorderColor,30%)

# hover
CheckBox.icon.hoverBorderColor = $CheckBox.icon.focusedBorderColor
CheckBox.icon.hoverBackground = lighten($CheckBox.icon.background,3%,derived)

# pressed
CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor
CheckBox.icon.pressedBackground = lighten($CheckBox.icon.background,6%,derived)


# used if CheckBox.icon.style or RadioButton.icon.style = filled
# enabled
CheckBox.icon[filled].selectedBorderColor = $CheckBox.icon.checkmarkColor
CheckBox.icon[filled].selectedBackground = $CheckBox.icon.checkmarkColor
CheckBox.icon[filled].checkmarkColor = $CheckBox.icon.background
# hover
CheckBox.icon[filled].hoverSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,3%,derived)
# pressed
CheckBox.icon[filled].pressedSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,6%,derived)


#---- CheckBoxMenuItem ----

CheckBoxMenuItem.icon.checkmarkColor = @buttonArrowColor
CheckBoxMenuItem.icon.disabledCheckmarkColor = @buttonDisabledArrowColor


#---- Component ----

Component.borderColor = tint(@background,19%)
Component.disabledBorderColor = $Component.borderColor
Component.focusedBorderColor = lighten($Component.focusColor,5%)
Component.focusColor = @accentFocusColor
Component.linkColor = @accentLinkColor
Component.accentColor = if(@accentColor, @accentColor, @accentBaseColor)
Component.grayFilter = -20,-70,100

Component.error.borderColor = desaturate($Component.error.focusedBorderColor,25%)
Component.error.focusedBorderColor = #8b3c3c
Component.warning.borderColor = darken(desaturate($Component.warning.focusedBorderColor,20%),10%)
Component.warning.focusedBorderColor = #ac7920
Component.success.borderColor = desaturate($Component.success.focusedBorderColor,25%)
Component.success.focusedBorderColor = #648b3c
Component.custom.borderColor = desaturate(#f00,50%,relative derived noAutoInverse)


#---- Desktop ----

Desktop.background = #3E434C


#---- DesktopIcon ----

DesktopIcon.background = lighten($Desktop.background,10%,derived)


#---- HelpButton ----

HelpButton.questionMarkColor = shade(@foreground,10%)
HelpButton.disabledQuestionMarkColor = tint(@background,30%)


#---- InternalFrame ----

InternalFrame.activeTitleBackground = darken(@background,10%)
InternalFrame.activeTitleForeground = @foreground
InternalFrame.inactiveTitleBackground = lighten($InternalFrame.activeTitleBackground,5%)
InternalFrame.inactiveTitleForeground = @disabledForeground

InternalFrame.activeBorderColor = darken(@background,7%)
InternalFrame.inactiveBorderColor = darken(@background,3%)

InternalFrame.buttonHoverBackground = lighten($InternalFrame.activeTitleBackground,10%,derived)
InternalFrame.buttonPressedBackground = lighten($InternalFrame.activeTitleBackground,20%,derived)
InternalFrame.closeHoverBackground = lazy(Actions.Red)
InternalFrame.closePressedBackground = darken(Actions.Red,10%,lazy)
InternalFrame.closeHoverForeground = #fff
InternalFrame.closePressedForeground = #fff

InternalFrame.activeDropShadowOpacity = 0.5
InternalFrame.inactiveDropShadowOpacity = 0.75


#---- Menu ----

Menu.icon.arrowColor = @buttonArrowColor
Menu.icon.disabledArrowColor = @buttonDisabledArrowColor


#---- MenuBar ----

MenuBar.borderColor = $Separator.foreground


#---- PasswordField ----

PasswordField.capsLockIconColor = #ffffff64
PasswordField.revealIconColor = @foreground


#---- Popup ----

[mac]Popup.roundedBorderWidth = 1
Popup.dropShadowColor = #000
Popup.dropShadowOpacity = 0.25


#---- PopupMenu ----

PopupMenu.borderColor = tint(@background,17%)
PopupMenu.hoverScrollArrowBackground = lighten(@background,5%)


#---- ProgressBar ----

ProgressBar.background = lighten(@background,8%)
ProgressBar.foreground = @accentSliderColor
ProgressBar.selectionBackground = @foreground
ProgressBar.selectionForeground = contrast($ProgressBar.foreground, shade(@background), tint(@foreground), 25%)


#---- RootPane ----

RootPane.activeBorderColor = lighten(@background,7%,derived)
RootPane.inactiveBorderColor = lighten(@background,5%,derived)


#---- ScrollBar ----

ScrollBar.track = lighten(@background,1%,derived noAutoInverse)
ScrollBar.thumb = lighten($ScrollBar.track,15%,derived noAutoInverse)
ScrollBar.hoverTrackColor = lighten($ScrollBar.track,4%,derived noAutoInverse)
ScrollBar.hoverThumbColor = lighten($ScrollBar.thumb,10%,derived noAutoInverse)
ScrollBar.pressedThumbColor = lighten($ScrollBar.thumb,15%,derived noAutoInverse)
ScrollBar.hoverButtonBackground = lighten(@background,5%,derived noAutoInverse)
ScrollBar.pressedButtonBackground = lighten(@background,10%,derived noAutoInverse)


#---- Separator ----

Separator.foreground = tint(@background,15%)


#---- Slider ----

Slider.trackValueColor = @accentSliderColor
Slider.trackColor = lighten(@background,15%)
Slider.thumbColor = $Slider.trackValueColor
Slider.tickColor = @disabledForeground
Slider.focusedColor = fade(changeLightness($Component.focusColor,60%,derived),30%,derived)
Slider.hoverThumbColor = lighten($Slider.thumbColor,5%,derived)
Slider.pressedThumbColor = lighten($Slider.thumbColor,8%,derived)
Slider.disabledTrackColor = lighten(@background,10%)
Slider.disabledThumbColor = $Slider.disabledTrackColor


#---- SplitPane ----

SplitPaneDivider.draggingColor = $Component.borderColor


#---- TabbedPane ----

TabbedPane.underlineColor = @accentUnderlineColor
TabbedPane.inactiveUnderlineColor = mix(@accentUnderlineColor,$TabbedPane.background,60%)
TabbedPane.disabledUnderlineColor = lighten(@background,23%)
TabbedPane.hoverColor = darken($TabbedPane.background,5%,derived noAutoInverse)
TabbedPane.focusColor = mix(@selectionBackground,$TabbedPane.background,25%)
TabbedPane.contentAreaColor = $Component.borderColor

TabbedPane.buttonHoverBackground = darken($TabbedPane.background,5%,derived noAutoInverse)
TabbedPane.buttonPressedBackground = darken($TabbedPane.background,8%,derived noAutoInverse)

TabbedPane.closeBackground = null
TabbedPane.closeForeground = @disabledForeground
TabbedPane.closeHoverBackground = lighten($TabbedPane.background,5%,derived)
TabbedPane.closeHoverForeground = @foreground
TabbedPane.closePressedBackground = lighten($TabbedPane.background,10%,derived)
TabbedPane.closePressedForeground = $TabbedPane.closeHoverForeground


#---- Table ----

Table.gridColor = lighten($Table.background,8%)


#---- TableHeader ----

TableHeader.hoverBackground = lighten($TableHeader.background,5%,derived)
TableHeader.pressedBackground = lighten($TableHeader.background,10%,derived)
TableHeader.separatorColor = lighten($TableHeader.background,10%)
TableHeader.bottomSeparatorColor = $TableHeader.separatorColor


#---- TitlePane ----

TitlePane.embeddedForeground = darken($TitlePane.foreground,15%)
TitlePane.buttonHoverBackground = lighten($TitlePane.background,10%,derived)
TitlePane.buttonPressedBackground = lighten($TitlePane.background,6%,derived)

# Linux
[linux]TitlePane.buttonBackground = lighten($TitlePane.background,5%,derived)
[linux]TitlePane.buttonHoverBackground = lighten($TitlePane.background,10%,derived)
[linux]TitlePane.buttonPressedBackground = lighten($TitlePane.background,15%,derived)


#---- ToggleButton ----

ToggleButton.selectedBackground = lighten($ToggleButton.background,10%,derived)
ToggleButton.disabledSelectedBackground = lighten($ToggleButton.background,3%,derived)

ToggleButton.toolbar.selectedBackground = lighten($ToggleButton.background,7%,derived)


#---- ToolBar ----

ToolBar.hoverButtonGroupBackground = lighten($ToolBar.background,3%,derived)


#---- ToolTip ----

ToolTip.border = 4,6,4,6
ToolTip.background = shade(@background,50%)


#---- Tree ----

Tree.hash = lighten($Tree.background,5%)



#---- Styles ------------------------------------------------------------------

#---- inTextField ----
# for leading/trailing components in text fields

[style]Button.inTextField = \
	focusable: false; \
	toolbar.margin: 1,1,1,1; \
	toolbar.spacingInsets: 1,1,1,1; \
	toolbar.hoverBackground: lighten($TextField.background,5%); \
	toolbar.pressedBackground: lighten($TextField.background,10%); \
	toolbar.selectedBackground: lighten($TextField.background,15%)
