   const postGain = audioContext.createGain();             // small makeup gain (post-compressor)

        // Gentler compression (allows a touch more loudness)
        compressor.threshold.setValueAtTime( -20, now ); // was -24
        compressor.knee.setValueAtTime( 30, now );
        compressor.ratio.setValueAtTime( 8, now );      // was 12
        compressor.attack.setValueAtTime( 0.003, now );
        compressor.release.setValueAtTime( 0.25, now );

        // Routing: oscillators -> envGain -> compres