{
    "effectName": "Fan",
    "properties": [
        {
            "id": "Fan_CenterX",
            "label": "Center X",
            "type": "int",
            "controlType": "slider",
            "default": 50,
            "min": 0,
            "max": 100,
            "valueCurve": true,
            "lockable": true,
            "description": "Horizontal position of the fan center as a percentage of the buffer width."
        },
        {
            "id": "Fan_CenterY",
            "label": "Center Y",
            "type": "int",
            "controlType": "slider",
            "default": 50,
            "min": 0,
            "max": 100,
            "valueCurve": true,
            "lockable": true,
            "description": "Vertical position of the fan center as a percentage of the buffer height."
        },
        {
            "id": "Fan_Start_Radius",
            "label": "Radius1",
            "type": "int",
            "controlType": "slider",
            "default": 1,
            "min": 0,
            "max": 2500,
            "valueCurve": true,
            "lockable": true,
            "description": "Inner radius of the fan blades. Pixels closer to the center than this are not drawn."
        },
        {
            "id": "Fan_Start_Angle",
            "label": "Angle",
            "type": "int",
            "controlType": "slider",
            "default": 0,
            "min": 0,
            "max": 360,
            "valueCurve": true,
            "lockable": true,
            "description": "Starting rotation angle of the fan blades in degrees."
        },
        {
            "id": "Fan_End_Radius",
            "label": "Radius2",
            "type": "int",
            "controlType": "slider",
            "default": 50,
            "min": 0,
            "max": 2500,
            "valueCurve": true,
            "lockable": true,
            "description": "Outer radius of the fan blades. Pixels farther from the center than this are not drawn."
        },
        {
            "id": "Fan_Revolutions",
            "label": "Rev's",
            "type": "float",
            "controlType": "slider",
            "settingPrefix": "SLIDER",
            "default": 2.0,
            "min": 0,
            "max": 3600,
            "divisor": 360,
            "valueCurve": true,
            "lockable": true,
            "description": "Total number of revolutions the fan rotates over the duration of the effect. settingPrefix:SLIDER because FanEffect::Render calls GetValueCurveInt which reads SLIDER_<id> as a raw pre-divisor int and divides inside ValueCurve."
        },
        {
            "id": "Fan_Num_Blades",
            "label": "# Blades",
            "type": "int",
            "controlType": "slider",
            "default": 3,
            "min": 1,
            "max": 16,
            "valueCurve": true,
            "lockable": true,
            "description": "Number of blades evenly spaced around the fan."
        },
        {
            "id": "Fan_Blade_Width",
            "label": "Width",
            "type": "int",
            "controlType": "slider",
            "default": 50,
            "min": 5,
            "max": 100,
            "valueCurve": true,
            "lockable": true,
            "description": "Angular width of each blade as a percentage of the space between blades. Higher values make wider blades with less gap."
        },
        {
            "id": "Fan_Blade_Angle",
            "label": "Angle",
            "type": "int",
            "controlType": "slider",
            "default": 90,
            "min": -360,
            "max": 360,
            "valueCurve": true,
            "lockable": true,
            "description": "Twist angle applied to each blade based on distance from center, creating curved or spiral blade shapes."
        },
        {
            "id": "Fan_Num_Elements",
            "label": "# Elements",
            "type": "int",
            "controlType": "slider",
            "default": 1,
            "min": 1,
            "max": 4,
            "valueCurve": true,
            "lockable": true,
            "description": "Number of colored sub-elements within each blade. Each element uses the next palette color."
        },
        {
            "id": "Fan_Element_Width",
            "label": "Width",
            "type": "int",
            "controlType": "slider",
            "default": 100,
            "min": 5,
            "max": 100,
            "valueCurve": true,
            "lockable": true,
            "description": "Width of each element as a percentage of the available element space. Lower values create gaps between elements."
        },
        {
            "id": "Fan_Duration",
            "label": "Duration",
            "type": "int",
            "controlType": "slider",
            "default": 80,
            "min": 0,
            "max": 100,
            "valueCurve": true,
            "lockable": true,
            "description": "Percentage of the effect time that the blades are fully visible. Lower values cause the blades to grow in and shrink out."
        },
        {
            "id": "Fan_Accel",
            "label": "Acceleration",
            "type": "int",
            "controlType": "slider",
            "default": 0,
            "min": -10,
            "max": 10,
            "valueCurve": true,
            "lockable": true,
            "description": "Adjusts the rotation speed curve. Positive values accelerate toward the end, negative values decelerate."
        },
        {
            "id": "Fan_Reverse",
            "label": "Reverse",
            "type": "bool",
            "controlType": "checkbox",
            "default": false,
            "description": "Reverses the direction of fan rotation."
        },
        {
            "id": "Fan_Blend_Edges",
            "label": "Blend Edges",
            "type": "bool",
            "controlType": "checkbox",
            "default": true,
            "description": "When enabled, blade edges fade smoothly using alpha or brightness instead of having hard edges."
        },
        {
            "id": "Fan_Scale",
            "label": "Scale to Buffer",
            "type": "bool",
            "controlType": "checkbox",
            "default": true,
            "description": "When enabled, radius values are treated as percentages of the buffer size rather than absolute pixel values."
        }
    ],
    "groups": [
        {
            "type": "tabs",
            "tabs": [
                {
                    "label": "Position",
                    "properties": [
                        "Fan_CenterX",
                        "Fan_CenterY",
                        "Fan_Start_Radius",
                        "Fan_Start_Angle",
                        "Fan_End_Radius",
                        "Fan_Revolutions"
                    ]
                },
                {
                    "label": "Blades",
                    "properties": [
                        "Fan_Num_Blades",
                        "Fan_Blade_Width",
                        "Fan_Blade_Angle",
                        "Fan_Num_Elements",
                        "Fan_Element_Width"
                    ]
                },
                {
                    "label": "Options",
                    "properties": [
                        "Fan_Duration",
                        "Fan_Accel",
                        "Fan_Reverse",
                        "Fan_Blend_Edges",
                        "Fan_Scale"
                    ]
                }
            ],
            "settingKey": "E_NOTEBOOK_Fan"
        }
    ]
}
