How to change RGB without changing alpha in sprite frag shader?

I’m adding fog to a custom sprite vert+surf shader, rendered with a SpriteRenderer. It’s as easy as removing #pragma nofog, but the result applies the fog color to transparent portions of my sprites, resulting in semi-visible boxes around them.

I traced this to Unity’s UNITY_FOG_LERP_COLOR, called at the end of the Unity generated frag shader (frag_surf):

#define UNITY_FOG_LERP_COLOR(col,fogCol,fogFac) col.rgb = lerp((fogCol).rgb, (col).rgb, saturate(fogFac))

If I change it to:

col.r = 1;

Now it only sets the red channel to 1. It shouldn’t affect other colors, or the alpha, right? But the result still adds semi-visible red boxes around my sprites (pictured above). Does Unity somehow embed alpha information into the R channel? How do I change RGB in the frag shader without affecting alpha?

I don’t want to use clip. Multiplying col.rgb by col.a after applying the fog looks close to correct, but adds a faint dark outline.

My shader:

Shader "Northway/SpritesDiffuseWave" {
    Properties {
        [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}

    SubShader {
        Tags {

        Cull Off
        Lighting Off
        ZWrite Off
        Blend One OneMinusSrcAlpha

        #pragma surface surf SimpleLambert vertex:vert nolightmap nodynlightmap keepalpha noinstancing //nofog 
        #include "UnitySprites.cginc"

		#define UNITY_FOG_LERP_COLOR(col,fogCol,fogFac) col.r = 1;
        struct Input {
            float2 uv_MainTex;
            fixed4 color;
        half4 LightingSimpleLambert(SurfaceOutput s, half3 lightDir, half atten) {
			half4 c;
			c.rgb = s.Albedo * _LightColor0.rgb * atten * 0.60;
			c.a = s.Alpha;
			return c;
        void vert (inout appdata_full v, out Input o) {
            UNITY_INITIALIZE_OUTPUT(Input, o);

			//... vertex shader code

        void surf (Input IN, inout SurfaceOutput o) {
			fixed4 color = tex2D(_MainTex, IN.uv_MainTex) * IN.color;
            o.Albedo = color.rgb * color.a;
            o.Alpha = color.a;


	Fallback "Transparent/VertexLit"

I was on the right track with multiplying rgb by alpha; I needed to multiply the FOG rgb by alpha before I lerp it in. Presumably col.rgb already has the alpha information baked in, but fogCol.rgb does not.

#define UNITY_FOG_LERP_COLOR(col,fogCol,fogFac) col.rgb = lerp((fogCol).rgb * col.a, (col).rgb, saturate(fogFac))

This works with #pragma keepalpha or alpha:premul but not alpha:blend.