# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

Nb.LFCustoms={instance}org.netbeans.swing.laf.flatlaf.FlatLFCustoms


nb.explorer.unfocusedSelBg=@selectionInactiveBackground
nb.explorer.unfocusedSelFg=@selectionInactiveForeground
nb.explorer.noFocusSelectionBackground=@selectionInactiveBackground
nb.explorer.noFocusSelectionForeground=@selectionInactiveForeground

controlShadow=$Component.borderColor

# hide grip in divider
SplitPaneDivider.style = plain

#---- TabbedPane ----

# Decrease a bit from the default of 32. For comparison, a selected tab on the standard Swing
# Windows LAF is 22 pixels tall.
TabbedPane.tabHeight=30
TabbedPane.inactiveUnderlineColor = $TabbedContainer.editor.contentBorderColor


#---- TabbedContainer ----

TabbedContainer.editor.contentBorderColor=$Component.borderColor
TabbedContainer.view.contentBorderColor=$Component.borderColor


#---- EditorTab ----

EditorTab.tabInsets=5,7,7,6
EditorTab.underlineHeight=3
EditorTab.underlineAtTop=true
EditorTab.tabSeparatorColor=$Component.borderColor
EditorTab.showTabSeparators=true
EditorTab.showSelectedTabBorder=true

#---- ViewTab ----

ViewTab.tabInsets=5,6,7,2
ViewTab.underlineHeight=3
ViewTab.underlineAtTop=true
ViewTab.tabSeparatorColor=$Component.borderColor
ViewTab.showTabSeparators=true
ViewTab.showSelectedTabBorder=true

#---- Multi-tabs ----

nb.multitabs.tabInsets=5,2,7,2
nb.multitabs.underlineHeight={scaledInteger}3
nb.multitabs.showVerticalLines=true
nb.multitabs.showHorizontalLines=false
nb.multitabs.gridColor=$Component.borderColor
nb.multitabs.noTabBorder=true

nb.multitabs.background=$EditorTab.background
nb.multitabs.foreground=@foreground
nb.multitabs.activeBackground=$EditorTab.activeBackground
nb.multitabs.selectedBackground=$EditorTab.selectedBackground
nb.multitabs.selectedForeground=$EditorTab.selectedForeground
nb.multitabs.hoverBackground=$EditorTab.hoverBackground
nb.multitabs.underlineColor=$TabbedPane.underlineColor
nb.multitabs.inactiveUnderlineColor=$EditorTab.inactiveUnderlineColor

#---- Code Completion ----
nb.completion.selectedBackground=@selectionBackground
nb.completion.selectedForeground=@selectionForeground

#---- TabControlIcon ----

TabControlIcon.foreground=$ComboBox.buttonArrowColor
TabControlIcon.disabledForeground=$ComboBox.buttonDisabledArrowColor
TabControlIcon.rolloverBackground=$Button.toolbar.hoverBackground
TabControlIcon.pressedBackground=$Button.toolbar.pressedBackground
TabControlIcon.close.rolloverBackground=#c74f50
TabControlIcon.close.rolloverForeground=#fff
TabControlIcon.arc=2


#---- PropSheet ----

PropSheet.selectedSetBackground=@selectionBackground
PropSheet.selectedSetForeground=@selectionForeground
PropSheet.selectionBackground=@selectionBackground
PropSheet.selectionForeground=@selectionForeground
PropSheet.intercellSpacing={dimension}0,1


ETableHeader.ascendingIcon=$Table.ascendingSortIcon
ETableHeader.descendingIcon=$Table.descendingSortIcon

nb.html.link.foreground=$Component.linkColor
nb.html.link.foreground.hover=darken($Component.linkColor,5%)
nb.html.link.foreground.focus=$Component.linkColor
nb.html.link.foreground.visited=#628FB5

# Start Page
nb.startpage.bottombar.background=$TabbedPane.focusColor
nb.startpage.topbar.background=@background
nb.startpage.topbar.foreground=@foreground
nb.startpage.border.color=@background
nb.startpage.tab.border1.color=@background
nb.startpage.tab.border2.color=@background
nb.startpage.rss.header.color=$Component.linkColor
nb.startpage.rss.details.color=@foreground

nb.startpage.tab.imagename.rollover=org/netbeans/swing/laf/flatlaf/resources/welcome_tab_rollover.png
nb.startpage.tab.imagename.selected=org/netbeans/swing/laf/flatlaf/resources/welcome_tab_selected.png

# Notification Baloon
nb.core.ui.balloon.mouseOverGradientStartColor=$ToolTip.background
nb.core.ui.balloon.mouseOverGradientFinishColor=$ToolTip.background
nb.core.ui.balloon.defaultGradientStartColor=$ToolTip.background
nb.core.ui.balloon.defaultGradientFinishColor=$ToolTip.background

#---- HeapView ----
nb.heapview.background=@background
nb.heapview.foreground=lighten(@foreground,15%)

# QuickSearch
nb.quicksearch.border = 1,1,1,1

# popup switcher
nb.popupswitcher.border=1,1,1,1,$PopupMenu.borderColor

# Windows file chooser places bar (at left side; class sun.swing.WindowsPlacesBar)
[win]ToolBar.shadow=@background


#---- Main Toolbar ----
Nb.MainWindow.Toolbar.Dragger=org.netbeans.swing.laf.flatlaf.ui.FlatToolbarDragger


#---- OptionsPanel ----

nb.options.categories.tabPanelForeground = @foreground
nb.options.categories.separatorColor = $Separator.foreground
nb.options.categories.selectionBorderColor = $nb.options.categories.selectionBackground
nb.options.categories.highlightBorderColor = $nb.options.categories.highlightBackground
