Editor/EditorTheme.cs
using Sandbox;
using System;

public class EditorTheme
{
	[Group( "Window" )] public Color TabBackground { get; set; } = new Color( 0.231f, 0.231f, 0.231f );
	[Group( "Window" )] public Color TabBarBackground { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Window" )] public Color TabInactiveBackground { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Window" )] public Color SurfaceBackground { get; set; } = new Color( 0.231f, 0.231f, 0.231f );
	[Group( "Window" )] public Color SurfaceLightBackground { get; set; } = new Color( 0.412f, 0.412f, 0.412f );
	[Group( "Window" )] public Color SidebarBackground { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Window" )] public Color WindowBackground { get; set; } = new Color( 0.094f, 0.094f, 0.094f );
	[Group( "Window" )] public Color WidgetBackground { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Window" )] public Color ControlBackground { get; set; } = new Color( 0.094f, 0.094f, 0.094f );
	[Group( "Window" )] public Color ButtonBackground { get; set; } = new Color( 0.231f, 0.231f, 0.231f );
	[Group( "Window" )] public Color SelectedBackground { get; set; } = new Color( 0.502f, 0.502f, 0.502f );
	[Group( "Window" )] public Color StatusBarBackground { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Text" )] public Color Text { get; set; } = new Color( 1.0f, 1.0f, 1.0f );
	[Group( "Text" )] public Color TextControl { get; set; } = new Color( 1.0f, 1.0f, 1.0f );
	[Group( "Text" )] public Color TextLight { get; set; } = new Color( 0.62f, 0.62f, 0.62f );
	[Group( "Text" )] public Color TextWidget { get; set; } = new Color( 1.0f, 1.0f, 1.0f );
	[Group( "Text" )] public Color TextButton { get; set; } = new Color( 1.0f, 1.0f, 1.0f );
	[Group( "Text" )] public Color TextSelected { get; set; } = new Color( 0.4f, 0.639f, 1.0f );
	[Group( "Text" )] public Color TextLink { get; set; } = new Color( 0.4f, 0.639f, 1.0f );
	[Group( "Text" )] public Color TextHighlight { get; set; } = new Color( 0.4f, 0.639f, 1.0f );
	[Group( "Text" )] public Color TextDisabled { get; set; } = new Color( 1.0f, 1.0f, 1.0f, 0.47f );
	[Group( "Text" )] public Color TextDark { get; set; } = new Color( 0.0f, 0.0f, 0.0f );
	[Group( "Window" )] public Color Border { get; set; } = new Color( 0.322f, 0.322f, 0.322f );
	[Group( "Window" )] public Color BorderLight { get; set; } = new Color( 0.412f, 0.412f, 0.412f );
	[Group( "Window" )] public Color BorderButton { get; set; } = new Color( 0.412f, 0.412f, 0.412f );
	[Group( "Window" )] public Color Shadow { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Window" )] public Color Primary { get; set; } = new Color( 0.353f, 0.553f, 0.922f );
	[Group( "Window" )] public Color Overlay { get; set; } = new Color( 0.141f, 0.141f, 0.141f );
	[Group( "Window" )] public Color MultipleValues { get; set; } = new Color( 0.502f, 0.502f, 0.502f );
	[Group( "Window" )] public Color Highlight { get; set; } = new Color( 0.298f, 0.478f, 0.749f );

	[Group( "Checkbox" )] public Color ToggleEnabled { get; set; } = new Color( 0.353f, 0.922f, 0.361f );
	[Group( "Checkbox" )] public Color ToggleDisabled { get; set; } = new Color( 0.337f, 0.431f, 0.337f );

	[Group( "Window" )] public Color Base { get; set; } = new Color(0.125f, 0.125f, 0.125f);

	[Group( "Window" )] public Color BaseAlt { get; set; } = new Color(0.164f,0.164f,0.164f);
	
	[Group( "Colors?" )] public Color Blue { get; set; } = new Color( 0.353f, 0.553f, 0.922f );

	[Group( "Colors?" )] public Color Green { get; set; } = new Color( 0.690f, 0.89f, 0.302f );

	[Group( "Colors?" )] public Color Red { get; set; } = new Color( 0.984f, 0.353f, 0.353f );

	[Group( "Colors?" )] public Color Yellow { get; set; } = new Color( 0.902f, 0.859f, 0.455f );

	[Group( "Colors?" )] public Color Pink { get; set; } = new Color( 0.874f, 0.569f, 0.580f );

	[Group( "Files" )] public Color Prefab { get; set; } = new Color( 0.353f, 0.553f, 0.922f );

	[Group( "Files" )] public Color Folder { get; set; } = new Color( 0.902f, 0.859f, 0.455f );

	[Group( "Layout" )] public int RowHeight { get; set; } = 22;
	[Group( "Layout" )] public int ControlHeight { get; set; } = 22;
	[Group( "Layout" )] public int ControlRadius { get; set; } = 4;

	[FontName][Group( "Text" )] public string HeadingFont { get; set; } = "Inter";

	[FontName][Group( "Text" )] public string DefaultFont { get; set; } = "Inter";

	public EditorTheme()
	{ }

	public static EditorTheme ShallowCopy( EditorTheme source )
	{
		if ( source == null )
			throw new ArgumentNullException( nameof( source ) );

		EditorTheme copy = new EditorTheme();
		var properties = typeof( EditorTheme ).GetProperties();

		foreach ( var prop in properties )
		{
			if ( prop.CanRead && prop.CanWrite )
			{
				var value = prop.GetValue( source, null );
				prop.SetValue( copy, value, null );
			}
		}

		return copy;
	}
}