#
# 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 light themes (that extend class FlatLightLaf).
#
# 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 IntelliJ 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 = #f2f2f2
@foreground = #000
@disabledBackground = @background
@disabledForeground = tint(@foreground,55%)

# component background
@buttonBackground = lighten(@background,5%)
@componentBackground = lighten(@background,5%)
@menuBackground = lighten(@background,5%)

# selection
@selectionBackground = @accentSelectionBackground
@selectionForeground = contrast(@selectionBackground, @foreground, #fff)
@selectionInactiveBackground = shade(@background,13%)
@selectionInactiveForeground = @foreground

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

# misc
@cellFocusColor = darken(@selectionBackground,20%)
@icon = shade(@background,27%)

# 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 = #2675BF
@accentBase2Color = lighten(saturate(@accentBaseColor,10%),6%)
#   accent color variations
@accentCheckmarkColor           = if(@accentColor, @accentColor, tint(@accentBase2Color,20%))
@accentFocusColor               = if(@accentColor, @accentColor, lighten(@accentBaseColor,31%))
@accentLinkColor                = if(@accentColor, @accentColor, darken(@accentBaseColor,3%))
@accentSelectionBackground      = if(@accentColor, @accentColor, @accentBaseColor)
@accentSliderColor              = if(@accentColor, @accentColor, @accentBase2Color)
@accentUnderlineColor           = if(@accentColor, @accentColor, tint(@accentBaseColor,10%))
@accentButtonDefaultBorderColor = if(@accentColor, @accentColor, tint(@accentBase2Color,20%))

# for buttons within components (e.g. combobox or spinner)
@buttonArrowColor = tint(@foreground,40%)
@buttonDisabledArrowColor = lighten(@buttonArrowColor,25%)
@buttonHoverArrowColor = lighten(@buttonArrowColor,20%,derived noAutoInverse)
@buttonPressedArrowColor = lighten(@buttonArrowColor,30%,derived noAutoInverse)

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


#---- system colors ----

activeCaption = #99b4d1
inactiveCaption = #bfcddb
controlHighlight = lighten($controlShadow,12%)
controlLtHighlight = lighten($controlShadow,25%)
controlDkShadow = darken($controlShadow,15%)


#---- Button ----

Button.background = @buttonBackground
Button.focusedBackground = changeLightness($Component.focusColor,95%)
Button.hoverBackground = darken($Button.background,3%,derived)
Button.pressedBackground = darken($Button.background,10%,derived)
Button.selectedBackground = darken($Button.background,20%,derived)
Button.selectedForeground = $Button.foreground
Button.disabledSelectedBackground = darken($Button.background,13%,derived)

Button.borderColor = $Component.borderColor
Button.disabledBorderColor = $Component.disabledBorderColor
Button.focusedBorderColor = $Component.focusedBorderColor
Button.hoverBorderColor = $Button.focusedBorderColor

Button.innerFocusWidth = 0

Button.default.background = $Button.background
Button.default.foreground = $Button.foreground
Button.default.focusedBackground = $Button.focusedBackground
Button.default.hoverBackground = darken($Button.default.background,3%,derived)
Button.default.pressedBackground = darken($Button.default.background,10%,derived)
Button.default.borderColor = @accentButtonDefaultBorderColor
Button.default.hoverBorderColor = $Button.hoverBorderColor
Button.default.focusedBorderColor = $Button.focusedBorderColor
Button.default.focusColor = $Component.focusColor
Button.default.borderWidth = 2

Button.toolbar.hoverBackground = darken($Button.background,12%,derived)
Button.toolbar.pressedBackground = darken($Button.background,15%,derived)
Button.toolbar.selectedBackground = $Button.selectedBackground


#---- CheckBox ----

CheckBox.icon.focusWidth = 1

# enabled
CheckBox.icon.borderColor = shade($Component.borderColor,10%)
CheckBox.icon.background = @buttonBackground
CheckBox.icon.selectedBorderColor = $CheckBox.icon.checkmarkColor
CheckBox.icon.selectedBackground = $CheckBox.icon.background
CheckBox.icon.checkmarkColor = @accentCheckmarkColor

# disabled
CheckBox.icon.disabledBorderColor = tint($CheckBox.icon.borderColor,20%)
CheckBox.icon.disabledBackground = @disabledBackground
CheckBox.icon.disabledCheckmarkColor = lighten(changeSaturation($CheckBox.icon.checkmarkColor,0%),5%)

# focused
CheckBox.icon.focusedBorderColor = shade($Component.focusedBorderColor,10%)
CheckBox.icon.focusedBackground = changeLightness($Component.focusColor,95%)

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

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


# used if CheckBox.icon.style or RadioButton.icon.style = filled
# enabled
CheckBox.icon[filled].selectedBorderColor = shade($CheckBox.icon[filled].selectedBackground,5%)
CheckBox.icon[filled].selectedBackground = @accentCheckmarkColor
CheckBox.icon[filled].checkmarkColor = @buttonBackground
# focused
CheckBox.icon[filled].focusedSelectedBorderColor = tint($CheckBox.icon[filled].selectedBackground,50%)
CheckBox.icon[filled].focusedSelectedBackground = $CheckBox.icon[filled].selectedBackground
CheckBox.icon[filled].focusedCheckmarkColor = $CheckBox.icon.focusedBackground
# hover
CheckBox.icon[filled].hoverSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,5%,derived)
# pressed
CheckBox.icon[filled].pressedSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,10%,derived)


#---- CheckBoxMenuItem ----

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


#---- Component ----

Component.borderColor = shade(@background,20%)
Component.disabledBorderColor = tint($Component.borderColor,20%)
Component.focusedBorderColor = shade($Component.focusColor,10%)
Component.focusColor = @accentFocusColor
Component.linkColor = @accentLinkColor
Component.accentColor = if(@accentColor, @accentColor, @accentBaseColor)
Component.grayFilter = 25,-25,100

Component.error.borderColor = lighten(desaturate($Component.error.focusedBorderColor,20%),25%)
Component.error.focusedBorderColor = #e53e4d
Component.warning.borderColor = lighten(saturate($Component.warning.focusedBorderColor,25%),20%)
Component.warning.focusedBorderColor = #e2a53a
Component.custom.borderColor = lighten(desaturate(#f00,20%,derived noAutoInverse),25%,derived noAutoInverse)


#---- Desktop ----

Desktop.background = #E6EBF0


#---- DesktopIcon ----

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


#---- HelpButton ----

HelpButton.questionMarkColor = @accentCheckmarkColor
HelpButton.disabledQuestionMarkColor = shade(@background,30%)


#---- InternalFrame ----

InternalFrame.activeTitleBackground = #fff
InternalFrame.activeTitleForeground = @foreground
InternalFrame.inactiveTitleBackground = darken($InternalFrame.activeTitleBackground,2%)
InternalFrame.inactiveTitleForeground = @disabledForeground

InternalFrame.activeBorderColor = shade(@background,40%)
InternalFrame.inactiveBorderColor = shade(@background,20%)

InternalFrame.buttonHoverBackground = darken($InternalFrame.activeTitleBackground,10%,derived)
InternalFrame.buttonPressedBackground = darken($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.25
InternalFrame.inactiveDropShadowOpacity = 0.5


#---- Menu ----

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


#---- MenuBar ----

MenuBar.borderColor = $Separator.foreground


#---- PasswordField ----

PasswordField.capsLockIconColor = #00000064
PasswordField.revealIconColor = tint(@foreground,40%)


#---- Popup ----

Popup.dropShadowColor = #000
Popup.dropShadowOpacity = 0.15


#---- PopupMenu ----

PopupMenu.borderColor = shade(@background,28%)
PopupMenu.hoverScrollArrowBackground = darken(@background,5%)


#---- ProgressBar ----

ProgressBar.background = darken(@background,13%)
ProgressBar.foreground = @accentSliderColor
ProgressBar.selectionBackground = @foreground
ProgressBar.selectionForeground = contrast($ProgressBar.foreground, @foreground, @componentBackground)


#---- RootPane ----

RootPane.activeBorderColor = darken(@background,50%,derived)
RootPane.inactiveBorderColor = darken(@background,30%,derived)


#---- ScrollBar ----

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


#---- Separator ----

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


#---- Slider ----

Slider.trackValueColor = @accentSliderColor
Slider.trackColor = darken(@background,18%)
Slider.thumbColor = $Slider.trackValueColor
Slider.tickColor = @disabledForeground
Slider.focusedColor = fade(changeLightness($Component.focusColor,75%,derived),50%,derived)
Slider.hoverThumbColor = darken($Slider.thumbColor,5%,derived)
Slider.pressedThumbColor = darken($Slider.thumbColor,8%,derived)
Slider.disabledTrackColor = darken(@background,13%)
Slider.disabledThumbColor = $Slider.disabledTrackColor


#---- SplitPane ----

SplitPaneDivider.draggingColor = $Component.borderColor


#---- TabbedPane ----

TabbedPane.underlineColor = @accentUnderlineColor
TabbedPane.inactiveUnderlineColor = mix(@accentUnderlineColor,$TabbedPane.background,50%)
TabbedPane.disabledUnderlineColor = darken(@background,28%)
TabbedPane.hoverColor = darken($TabbedPane.background,7%,derived)
TabbedPane.focusColor = mix(@selectionBackground,$TabbedPane.background,10%)
TabbedPane.contentAreaColor = $Component.borderColor

TabbedPane.buttonHoverBackground = darken($TabbedPane.background,7%,derived)
TabbedPane.buttonPressedBackground = darken($TabbedPane.background,10%,derived)

TabbedPane.closeBackground = null
TabbedPane.closeForeground = @disabledForeground
TabbedPane.closeHoverBackground = darken($TabbedPane.background,20%,derived)
TabbedPane.closeHoverForeground = @foreground
TabbedPane.closePressedBackground = darken($TabbedPane.background,25%,derived)
TabbedPane.closePressedForeground = $TabbedPane.closeHoverForeground


#---- Table ----

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


#---- TableHeader ----

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


#---- TitlePane ----

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


#---- ToggleButton ----

ToggleButton.selectedBackground = darken($ToggleButton.background,20%,derived)
ToggleButton.disabledSelectedBackground = darken($ToggleButton.background,13%,derived)

ToggleButton.toolbar.selectedBackground = $ToggleButton.selectedBackground


#---- ToolBar ----

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


#---- ToolTip ----

ToolTip.border = 4,6,4,6,shade(@background,40%)
ToolTip.background = lighten(@background,3%)


#---- Tree ----

Tree.hash = darken($Tree.background,10%)



#---- 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: darken($TextField.background,4%); \
	toolbar.pressedBackground: darken($TextField.background,8%); \
	toolbar.selectedBackground: darken($TextField.background,12%)
